#include <bits/stdc++.h>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int n,m,i,j,str,sol[300005],mbr;
vector<pair<int,int>> queries[300005];
vector<int> L[255000];
vector<int> lant;
//raspund offline la queries
void dfs(int nod)
{
lant.push_back(nod);
for(auto qry: queries[nod])
{
int idx = lant.size() - 1- qry.first; // indexat de la 0
// 0 1 2 3
//1 2 4 7 .... al 2-lea al lui 7 = 4 - 1 - 2 = 1
if(idx >= 0)
sol[qry.second] = lant[idx];
}
for(int vec: L[nod])
dfs(vec);
lant.pop_back();
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
{
fin>>j;
L[j].push_back(i);
//tatal suprem este 0, e Adam ptc e la stramosii care nu mai stiu din ce vin. Dar evident ca si ei au un punct comun
}
for(int indc=1;indc<=m;indc++) //indc pastreaza ordinea intrebarilor
{
fin>>mbr>>str;
queries[mbr].push_back({str,indc});//al x-lea stramos al membrului y
}
dfs(0);
for(int i=1;i<=m;i++)
fout<<sol[i]<<'\n';
return 0;
}