Cod sursa(job #977408)
#include <vector>
#include <cstdio>
using namespace std;
const int MAX_N = 250002;
const int MAX_M = 300002;
int N, M, Nr;
int F[MAX_N], st[MAX_N], ans[MAX_M];
vector < int > v[MAX_N];
vector < pair < int, int > > Q[MAX_N];
inline void DFS(int x) {
st[++Nr] = x;
for(size_t j = 0; j < Q[x].size(); ++j)
if(Q[x][j].first >= Nr)
ans[Q[x][j].second] = 0;
else ans[Q[x][j].second] = st[Nr-Q[x][j].first];
for(size_t j = 0; j < v[x].size(); ++j)
DFS(v[x][j]);
--Nr;
}
int main() {
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
scanf("%d %d", &N, &M);
for(int i = 1; i <= N; ++i) {
scanf("%d", &F[i]);
v[F[i]].push_back(i);
}
for(int i = 1, x, k; i <= M; ++i) {
scanf("%d %d", &x, &k);
Q[x].push_back(make_pair(k, i));
}
for(int i = 1; i <= N; ++i)
if(!F[i])
DFS(i);
for(int i = 1; i <= M; ++i)
printf("%d\n", ans[i]);
fclose(stdin);
fclose(stdout);
return 0;
}