#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = uint64_t;
using pi = pair<int, int>;
using ti = tuple<int, int, int>;
using tl = tuple<ll, ll, ll>;
using pil = pair<int, ll>;
using pli = pair<ll, int>;
using pl = pair<ll, ll>;
using vi = vector<int>;
using vl = vector<ll>;
using vpi = vector<pi>;
using vpil = vector<pil>;
using vpli = vector<pli>;
using vpl = vector<pl>;
using vti = vector<ti>;
using vtl = vector<tl>;
using vvi = vector<vi>;
using vvl = vector<vl>;
using vvpi = vector<vpi>;
using vvpil = vector<vpil>;
using vvpli = vector<vpli>;
using vvpl = vector<vpl>;
using vvti = vector<vti>;
using vvtl = vector<vtl>;
#if 1
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
#define cin fin
#define cout fout
#endif
const int nmx = 25e4 + 1;
int t[nmx];
int a[nmx][20];
int lg[nmx];
int q(int x, int nr)
{
while (nr)
{
int p = lg[nr];
x = a[p][x];
nr -= (1<<p);
}
return x;
}
int n;
void prec()
{
for (int i = 2; i <= n; i++)
lg[i] = lg[i / 2] + 1;
for (int i = 1; i <= n; i++)
a[0][i] = t[i];
for (int i = 1; (1 << i) <= n; i++)
for (int j = 1; j <= n; j++)
a[i][j] = a[i - 1][a[i-1][j]];
}
int main()
{
int m;
cin >> n >> m;
for(int i=1;i<=n;i++)
{
int x;
cin >> x;
t[i] = x;
}
prec();
while (m--)
{
int x, y;
cin >> x >> y;
cout << q(x,y) << "\n";
}
}