#include <cstdio>
#include <vector>
#define max_n 250100
#define max_m 300100
using namespace std;
int n,m,rc;
vector <int > Gr[max_n];
vector <pair<int ,int> > queb[max_n];
int res[max_m],stack[max_n];
void read(){
freopen("stramosi.in","r",stdin);
int i;
int x,y;
scanf("%d %d", &n, &m);
for(i=1;i<=n;i++){
scanf("%d",&x);
Gr[x].push_back(i);
}
for(i=1;i<=m;i++){
scanf("%d %d",&x,&y);
queb[x].push_back(make_pair(i,y));
}
}
void depth_first(int node){
stack[++rc]=node;
for(vector <pair<int,int> > :: iterator it=queb[node].begin();it!=queb[node].end();it++){
if(rc-it->second>1)res[it->first]=stack[rc-it->second];
else res[it->first]=0;
}
for(vector <int> :: iterator it=Gr[node].begin();it!=Gr[node].end();it++)
depth_first(*it);
stack[rc--]=0;
}
int main(void){
read();
depth_first(0);
freopen("stramosi.out","w",stdout);
for(int i=1;i<=m;i++)
printf("%d\n",res[i]);
}