#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define sz 201000
ll par[sz];
ll rnk[sz];
ll add[sz];
ll val[sz];
ll getp(ll x)
{
if (par[x] == x)
return x;
return getp(par[x]);
}
ll getpolls(ll x)
{
if (par[x] == x)
return add[x];
return add[x] + getpolls(par[x]);
}
void uni(ll x, ll y)
{
ll u = getp(x);
ll v = getp(y);
if (u == v)
return;
if (rnk[u] < rnk[v])
swap(u, v);
par[v] = u;
add[v] -= add[u];
if (rnk[u] == rnk[v])
rnk[u]++;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
ll n, q; cin >> n >> q;
for (ll i = 1; i <= n; i++)
{
par[i] = i;
rnk[i] = 1;
}
while (q--)
{
string s; cin >> s;
if (s == "add")
{
ll a, b; cin >> a >> b;
add[getp(a)] += b;
}
else if (s == "join")
{
ll a, b; cin >> a >> b;
uni(a, b);
}
else
{
ll a; cin >> a;
cout << getpolls(a) << "\n";
}
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBzeiAyMDEwMDAKCmxsIHBhcltzel07CmxsIHJua1tzel07CmxsIGFkZFtzel07CmxsIHZhbFtzel07CgpsbCBnZXRwKGxsIHgpCnsKCWlmIChwYXJbeF0gPT0geCkKCQlyZXR1cm4geDsKCXJldHVybiBnZXRwKHBhclt4XSk7Cn0KCmxsIGdldHBvbGxzKGxsIHgpCnsKCWlmIChwYXJbeF0gPT0geCkKCQlyZXR1cm4gYWRkW3hdOwoJcmV0dXJuIGFkZFt4XSArIGdldHBvbGxzKHBhclt4XSk7Cn0KCnZvaWQgdW5pKGxsIHgsIGxsIHkpCnsKCWxsIHUgPSBnZXRwKHgpOwoJbGwgdiA9IGdldHAoeSk7CglpZiAodSA9PSB2KQoJCXJldHVybjsKCWlmIChybmtbdV0gPCBybmtbdl0pCgkJc3dhcCh1LCB2KTsKCXBhclt2XSA9IHU7CglhZGRbdl0gLT0gYWRkW3VdOwoJaWYgKHJua1t1XSA9PSBybmtbdl0pCgkJcm5rW3VdKys7Cn0KCmludCBtYWluKCkKewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7CgljaW4udGllKDApOyBjb3V0LnRpZSgwKTsKCglsbCBuLCBxOyBjaW4gPj4gbiA+PiBxOwoKCWZvciAobGwgaSA9IDE7IGkgPD0gbjsgaSsrKQoJewoJCXBhcltpXSA9IGk7CgkJcm5rW2ldID0gMTsKCX0KCgl3aGlsZSAocS0tKQoJewoJCXN0cmluZyBzOyBjaW4gPj4gczsKCQlpZiAocyA9PSAiYWRkIikKCQl7CgkJCWxsIGEsIGI7IGNpbiA+PiBhID4+IGI7CgkJCWFkZFtnZXRwKGEpXSArPSBiOwoJCX0KCQllbHNlIGlmIChzID09ICJqb2luIikKCQl7CgkJCWxsIGEsIGI7IGNpbiA+PiBhID4+IGI7CgkJCXVuaShhLCBiKTsKCQl9CgkJZWxzZQoJCXsKCQkJbGwgYTsgY2luID4+IGE7CgkJCWNvdXQgPDwgZ2V0cG9sbHMoYSkgPDwgIlxuIjsKCQl9Cgl9CgoJcmV0dXJuIDA7Cn0=