#include <bits/stdc++.h>
using namespace std;
#define TASK "test"
#define int long long
#define ii pair <int, int>
#define fi first
#define sc second
#define rep(i, s, e) for (int _s = (s), _e = (e), i = _s; i <= _e; i++)
#define reo(i, s, e) for (int _s = (s), _e = (e), i = _s; i >= _e; i--)
const int maxn = (int)1e5 + 5;
int n, k;
int par[maxn], sz[maxn];
int sum[maxn], dist[maxn];
ii find (int u) {
if (u == par[u]) return {u, 0};
ii x = find(par[u]);
par[u] = x.fi, dist[u] += x.sc;
return {par[u], dist[u]};
}
void uniset (int u, int v) {
u = find(u).fi, v = find(v).fi;
if (u == v) return ;
if (sz[u] < sz[v]) swap(u, v);
par[v] = u;
sz[u] += sz[v];
dist[v] += sum[v] - sum[u];
}
signed main () {
cin.tie(0)->sync_with_stdio(false);
#ifndef ONLINE_JUDGE
freopen(TASK".inp","r",stdin);
freopen(TASK".out","w",stdout);
#endif
cin >> n >> k;
rep (u, 1, n) {
par[u] = u;
sz[u] = 1;
}
while (k--) {
string s; cin >> s;
int u, v; cin >> u;
if (s[0] == 'g') {
ii x = find(u);
cout << sum[x.fi] + x.sc << '\n';
}
else {
cin >> v;
if (s[0] == 'j') uniset(u, v);
else sum[find(u).fi] += v;
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIFRBU0sgInRlc3QiCgojZGVmaW5lIGludCBsb25nIGxvbmcKI2RlZmluZSBpaSBwYWlyIDxpbnQsIGludD4KI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNjIHNlY29uZAoKI2RlZmluZSByZXAoaSwgcywgZSkgZm9yIChpbnQgX3MgPSAocyksIF9lID0gKGUpLCBpID0gX3M7IGkgPD0gX2U7IGkrKykKI2RlZmluZSByZW8oaSwgcywgZSkgZm9yIChpbnQgX3MgPSAocyksIF9lID0gKGUpLCBpID0gX3M7IGkgPj0gX2U7IGktLSkKCmNvbnN0IGludCBtYXhuID0gKGludCkxZTUgKyA1OwoKaW50IG4sIGs7CmludCBwYXJbbWF4bl0sIHN6W21heG5dOwppbnQgc3VtW21heG5dLCBkaXN0W21heG5dOwoKaWkgZmluZCAoaW50IHUpIHsKCWlmICh1ID09IHBhclt1XSkgcmV0dXJuIHt1LCAwfTsKCWlpIHggPSBmaW5kKHBhclt1XSk7CgoJcGFyW3VdID0geC5maSwgZGlzdFt1XSArPSB4LnNjOwoJcmV0dXJuIHtwYXJbdV0sIGRpc3RbdV19Owp9Cgp2b2lkIHVuaXNldCAoaW50IHUsIGludCB2KSB7Cgl1ID0gZmluZCh1KS5maSwgdiA9IGZpbmQodikuZmk7CgoJaWYgKHUgPT0gdikgcmV0dXJuIDsKCWlmIChzelt1XSA8IHN6W3ZdKSBzd2FwKHUsIHYpOwoKCXBhclt2XSA9IHU7Cglzelt1XSArPSBzelt2XTsKCglkaXN0W3ZdICs9IHN1bVt2XSAtIHN1bVt1XTsKfQoKc2lnbmVkIG1haW4gKCkgewoJY2luLnRpZSgwKS0+c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKCgkjaWZuZGVmIE9OTElORV9KVURHRQoJZnJlb3BlbihUQVNLIi5pbnAiLCJyIixzdGRpbik7CglmcmVvcGVuKFRBU0siLm91dCIsInciLHN0ZG91dCk7CgkjZW5kaWYKCgljaW4gPj4gbiA+PiBrOwoKCXJlcCAodSwgMSwgbikgewoJCXBhclt1XSA9IHU7CgkJc3pbdV0gPSAxOwoJfQkKCgl3aGlsZSAoay0tKSB7CgkJc3RyaW5nIHM7IGNpbiA+PiBzOwoJCWludCB1LCB2OyBjaW4gPj4gdTsKCQlpZiAoc1swXSA9PSAnZycpIHsKCQkJaWkgeCA9IGZpbmQodSk7CgkJCWNvdXQgPDwgc3VtW3guZmldICsgeC5zYyA8PCAnXG4nOwoJCX0KCQllbHNlIHsKCQkJY2luID4+IHY7CgkJCWlmIChzWzBdID09ICdqJykgdW5pc2V0KHUsIHYpOwoJCQllbHNlIHN1bVtmaW5kKHUpLmZpXSArPSB2OwoJCX0KCX0KCQoJcmV0dXJuIDA7Cn0K