#include <bits/stdc++.h>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int NMAX = 250005;
const int LOGMAX = 20;
int rmq[NMAX][LOGMAX];
int parinte[NMAX];
void preprocesare(int n){
for(int i = 0; (1<<i)<=n; i++){
rmq[0][i] = 0;
for(int nod = 1; nod<=n; nod++){
rmq[nod][0] = parinte[nod];
}
}
for(int i = 1; (1<<i)<=n; i++){
for(int nod = 1; nod<=n; nod++){
rmq[nod][i] = rmq[rmq[nod][i-1]][i-1];
}
}
}
int interogare(int nod, int nr, int logn){
for(int i = logn; i>=0; i--){
if((nr & (1<<i)))
nod = rmq[nod][i];
}
return nod;
}
int main(){
int N, M;
fin>>N>>M;
int logn = log2(N);
for(int nod = 1; nod<=N; nod++){
fin>>parinte[nod];
}
preprocesare(N);
for(int i = 0; i<M; i++){
int Q, P;
fin>>Q>>P;
fout<<interogare(Q, P, logn)<<"\n";
}
}