#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int Nmax = 250002;
int n, m;
int log2[20], s[Nmax][20];
vector<vector<int>> g;
int main()
{
int x, y, z;
fin >> n >> m;
g = vector<vector<int>>(n + 1);
for ( int i = 1; i <= n; i++ )
{
fin >> x;
if (x)
{
g[x].push_back(i);
s[i][0] = x;
}
}
log2[1] = 0;
for ( int i = 2; i < 20; i++ )
log2[i] = log2[i/2] + 1;
for ( int j = 0; j <= log2[n]; j++ )
for ( int i = 1; i <= n; i++ )
s[i][j+1] = s[s[i][j]][j];
while(m)
{
m--;
fin >> x >> y;
while(y)
{
x = s[x][log2[y]];
y = y - (1 << log2[y]);
}
fout << x << '\n';
}
return 0;
}