int z[2d5+1],l[]; mapm; graph g; void f(int i,int p){ rep[g.edge[i]](j,g.es[i]){ if(j!=p){ z[j]=max(z[i],l[j-2]); m[z[j]]+=1; f(j,i); } } } { int@n,a[n],b[n]; rd((l,a)(n-1)); b[0..n-2]=(2..); g.setEdge(n+1,n-1,a,b); f(1,1); int c=1; for(auto& i:m){ i.second=c+=i.second; } int@q; rep(q){ int@t,@x; if(t==1){ auto i=m.lower_bound(x+1); wt(i==m.begin()?1:(--i)->second); }else{ wt(z[x]?:-1); } } }