#include #include using ll = long long; #define MOD 1000000007 #define Mod 998244353 const int MAX = 1000000005; const long long INF = 1000000000000000005LL; using namespace std; using namespace atcoder; vector need(200005, MAX), L(200005); void dfs(int v, int p, vector> &G, int mx = 1) { mx = max(mx, L[v]); need[v] = min(need[v], mx); for (int nv : G[v]) { if (nv == p) continue; dfs(nv, v, G, mx); } } int main() { ios::sync_with_stdio(0);cin.tie(); int N; cin >> N; vector> G(N); L[0] = 1; for (int i = 1; i < N; i++) { int a; cin >> L[i] >> a; a--; G[a].push_back(i); } dfs(0, -1, G); int Q; cin >> Q; auto sorted = need; sort(sorted.begin(), sorted.end()); while (Q--) { int t, x; cin >> t >> x; if (t == 1) { cout << upper_bound(sorted.begin(), sorted.end(), x) - sorted.begin() << endl; } else { x--; cout << (need[x] == MAX ? -1 : need[x]) << endl; } } }