#include using namespace std; int main() { cin.tie(nullptr)->sync_with_stdio(false); int n, q; cin >> n >> q; mt19937_64 mt((size_t)main); vector par(n), pr(n), data(n); for (int i = 0; i < n; i++) { par[i] = i; pr[i] = (int)mt(); } auto find = [&](int v) { while (v != par[v]) { int &p = par[v]; if (p != par[p]) data[v] += data[p]; v = exchange(p, par[p]); } return v; }; auto merge = [&](int u, int v) { u = find(u), v = find(v); if (u == v) return; if (pr[u] < pr[v]) swap(u, v); par[v] = u; data[v] -= data[u]; }; auto get_data = [&](int v) -> int { int ret = data[v]; while (v != par[v]) ret += data[v = par[v]]; return ret; }; while (q--) { int t, a, b; cin >> t >> a >> b; if (t == 1) { merge(a - 1, b - 1); } else if (t == 2) { data[find(a - 1)] += b; } else { cout << get_data(a - 1) << "\n"; } } }