def uf_find(n,p,slis): allsum = 0 while p[n] != n: allsum += slis[n] n = p[n] allsum += slis[n] return n,allsum def uf_union(a,b,p,rank,slis): ap,tmp = uf_find(a,p,slis) bp,tmp = uf_find(b,p,slis) if ap == bp: return True else: p[ap] = len(p) p[bp] = len(p) slis.append(0) p.append(len(p)) return True N,Q = map(int,input().split()) TAB = [] p = [i for i in range(N)] rank = [1] * N slis = [0] * N for i in range(Q): t,a,b = map(int,input().split()) a -= 1 if t == 1: b -= 1 uf_union(a,b,p,rank,slis) elif t == 2: nowp,asum = uf_find(a,p,slis) slis[nowp] += b else: nowp,asum = uf_find(a,p,slis) print (asum)