import sys r = sys.stdin N,Q = map(int,r.readline().split()) sys.setrecursionlimit(10 ** 8) parent = [[i,1,{i},0] for i in range(N+1)] def find(i): if parent[i][0] == i: return i parent[i][0] = find(parent[i][0]) return parent[i][0] def unite(i,j): I = find(i) J = find(j) if I == J:return False if parent[I][1] > parent[J][1]: I,J = J,I #parent[J] = (J,parent[I][1] + parent[J][1],parent[J][2] | parent[I][2],parent[J][3]) parent[J][1] += parent[I][1] parent[J][2] |= parent[I][2] s = parent[J][3] t = parent[I][3] for v in parent[I][2]: dat[v] = dat[v] + t - s parent[I][0] = J return True dat = [0] * (N+1) for _ in range(Q): t,a,b = map(int,r.readline().split()) if t == 1: unite(a,b) elif t == 2: i = find(a) #parent[i] = (i,parent[i][1],parent[i][2],parent[i][3] + b) parent[i][3] += b else: n = parent[find(a)][3] print(dat[a] + n)