import bisect n = int(input()) e = [[] for i in range(n+1)] LA = [list(map(int,input().split())) for i in range(n-1)] q = int(input()) Q = [list(map(int,input().split())) for i in range(q)] inf = 10**10 level = [inf]*n level[0] = 1 nums = [0]*n for i,(l,a) in enumerate(LA,1): level[i] = l e[a-1].append(i) nums[i] += 1 dist = [inf]*n q = [] for i in range(n): if nums[i] == 0: q.append(i) dist[i] = level[i] while q: now = q.pop() for nex in e[now]: nums[nex] -= 1 if nums[nex] == 0: dist[nex] = max(dist[now],level[nex]) q.append(nex) techs = [inf] for i in dist: if i != inf: techs.append(i) techs.sort() for t,x in Q: if t == 1: print(bisect.bisect_right(techs,x)) else: ans = dist[x-1] if ans == inf: ans = -1 print(ans)