#include <iostream>
#include <fstream>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <cctype>
#include <unordered_map>
#include <cmath>
#include <bitset>
#include <set>
#include <string>
#include <cstring>
#include <algorithm>
#include <deque>
using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
typedef pair <int,int>iPair;
int a[100005],b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,S,t,x,y,z,ok,nr,C,xc,yc,Min,w,weight,u,v,ans,cost,Max,MOD,val,lvl,sum,MAX,current,st,dr,BASE,mid,semn;
vector<int> fii[250005];
int str[250005][35];
int viz[250005];
void dfs(int node,int pt){
viz[node]=1;
str[node][0]=pt;
for(int j=1;(1<<j)<=n;j++){
str[node][j]=str[str[node][j-1]][j-1];
}
for(auto w:fii[node]){
if(viz[w]==0) {
dfs(w,node);
}
}
}
int main()
{
in>>n>>m;
for(i=1;i<=n;i++){
in>>x;
fii[x].push_back(i);
}
dfs(0,0);
for(e=1;e<=m;e++){
in>>x>>y;
k=x;
for(j=0;(1<<j)<=y;j++){
if(y & (1<<j)){
k=str[k][j];
}
}
out<<k;
}
return 0;
}