#include using namespace std; using ll = long long; int main(){ int n; cin>>n; vector l(n,0),a(n,0); vector> g(n); for(int i = 1;i>l[i]>>a[i]; a[i]--; g[a[i]].push_back(i); } using dat = pair; priority_queue,greater> que; vector vis(n,0); que.push(make_pair(0ll,0)); while(que.size()){ dat now = que.top(); que.pop(); int ni = now.second; vis[ni] = 1; for(auto&e:g[ni]){ l[e] = max(l[e],l[ni]); que.push(make_pair(l[e],e)); } } vector can; for(int i = 0;i>q; while(q--){ int op; cin>>op; if(op==1){ int x; cin>>x; int ni = upper_bound(can.begin(),can.end(),x) - can.begin(); cout<>x; x--; if(vis[x]==0) cout<<-1<