1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 #include <string>
5 #include <algorithm>
6 #include <utility>
7 #include <vector>
8 #include <map>
9 #include <queue>
10 #include <stack>
11 #include <cstdlib>
12 #include <deque>
13 #include <set>
14 typedef long long ll;
15 #define lowbit(x) (x&(-x))
16 #define ls l,m,rt<<1
17 #define rs m+1,r,rt<<1|1
18 using namespace std;
19 const int N=2e5+9;
20 int n,k;
21 vector<int>vec[N];
22 int size[N],id[N],sid[N];
23 int index;
24 void dfs(int u){
25 id[u]=++index;//u在全遍历中的位置
26 sid[index]=u;//在全遍历中位置为index的是u
27 size[u]=1;//初始化容量为1
28 for(int i=0;i<vec[u].size();i++){
29 int v=vec[u][i];
30 dfs(v);
31 size[u]+=size[v];//每个数的实际容量
32 }
33 }
34 int main()
35 {
36 scanf("%d%d",&n,&k);
37 int x;
38 for(int i=2;i<=n;i++){
39 scanf("%d",&x);
40 vec[x].push_back(i);
41 }
42 dfs(1);//预处理
43 int u,v;
44 for(int i=0;i<k;i++){
45 scanf("%d%d",&u,&v);
46 if(v>size[u]) printf("-1\n");
47 else{
48 printf("%d\n",sid[id[u]+v-1]);//id[u]+v-1为从u开始遍历
49 //时第v的数的位置
50 }
51 }
52 return 0;
53 }