#include <bits/stdc++.h>
#define Nmax 300005
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int N, M, len;
vector<int> G[Nmax];
int t[Nmax], nr[Nmax], st[Nmax], q[Nmax], ans[Nmax];
void DFS(int node) {
st[++len] = node;
int pos = q[node];
ans[pos] = st[len - nr[pos]];
for (auto it: G[node])
DFS(it);
--len;
}
int main()
{
f >> N >> M;
for (int i = 1; i <= N; ++i) {
f >> t[i];
if (t[i]) G[t[i]].push_back(i);
}
for (int i = 1; i <= M; ++i) {
int x, y;
f >> x >> y;
q[x] = i, nr[i] = y;
}
for (int i = 1; i <= N; ++i)
if (t[i] == 0) DFS(i);
for (int i = 1; i <= M; ++i)
g << ans[i] << '\n';
return 0;
}