#include<fstream>
#include<vector>
#include<unordered_map>
#include<iostream>
#define P 500
#include<queue>
#include<cmath>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int n,m,pr[2][250005],c[250005],nr,a,q,p,ni[250005];
vector<int>x[250005];
void dfs(int nod,int niv)
{
for(auto i:x[nod])
{
ni[i]=niv;
if(niv%P==0)
pr[1][i]=i;
else
pr[1][i]=pr[1][nod];
dfs(i,niv+1);
}
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
{
fin>>pr[0][i];
c[pr[0][i]]=1;
x[pr[0][i]].push_back(i);
}
for(int i=1;i<=n;i++)
if(!pr[0][i])
{
pr[1][i]=i;
dfs(i,1);
}
// for(int i=1;i<=n;i++)
//cout<<ni[i]<<'\n';
for(int i=1;i<=m;i++)
{
fin>>q>>p;
a=q;
while(p)
{
if(p>P&&a!=pr[1][a])
{
p-=ni[a]-ni[pr[1][a]];
a=pr[1][a];
}
else
{
p--;
a=pr[0][a];
}
}
fout<<a<<'\n';
}
}