#include using namespace std; typedef long long ll; const int maxn = 2e5 + 10; const int logn = 18; int parent[maxn][logn]; vector depth(maxn, 0); int kth_ancestor(int node, int k) { if(depth[node] < k) { return -1; } for(int i = logn; i >= 0; i--) { if(node == -1) { break; } if(k & (1 << i)) { node = parent[node][i]; } } return node; } int main() { int n, q; cin >> n >> q; vector tree(n + 1, -1); for(int i = 2; i <= n; i++) { cin >> tree[i]; parent[i][0] = tree[i]; } tree[1] = 1; for(int i = 1; i <= n; i++) { if(i != 1) { depth[i] = depth[tree[i]] + 1; } parent[i][0] = tree[i]; for(int j = 1; j <= logn; j++) { parent[i][j] = parent[parent[i][j - 1]][j - 1]; } } while(q--) { int node, k; cin >> node >> k; cout << kth_ancestor(node, k) << endl; } return 0; }