#include <bits/stdc++.h>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
//raspund online cu ajutorul RMQ
int n,m,i,j,mbr,str,dp[300005][25],father[250005],logg2[30],pwr2[30];
//formez dp de rmq
void precalc()
{
pwr2[0]=1;
for(i=1;i<=20;i++)
pwr2[i]=pwr2[i-1]*2;
logg2[1]=0;
for(i=2;i<=250005;i++)
logg2[i]=logg2[i/2]+1;
}
int main()
{
fin>>n>>m;
int cm=m;
//citesc arbore de tati
for(i=1;i<=n;i++)
{
fin>>j;
dp[i][0]=j;
}
for(i = 1; i < 20; i++)
{
for(j = 1; j <= n; j++)
{
dp[j][i] = dp[dp[j][i - 1]][i - 1];
}
}
precalc();
//queries
while(cm--)
{
fin>>mbr>>str;
int x;
while(str > 0)
{
int put = logg2[str]; //2 //1 //0
x = dp[mbr][put]; //dp[9][2]=5 sa zicm
//x = dp[5][1] = 3 szcm //dp[3][0] = 2
str-=pwr2[put]; //7-4=3 //3-2=1 //1-1=0
mbr = x; //caut al 3-lea stramos al lui 5//acm devine 3
}
fout<<x<<'\n';
}
return 0;
}