#include <fstream>
#include <vector>
using namespace std;
constexpr int NMAX = 25e4 + 1;
constexpr int MMAX = 3e5;
int stiva[NMAX], e, ans[MMAX], k;
vector<int> vecini[NMAX];
vector<pair<int, int>> qu[NMAX];
void dfs(const int a) {
for (const auto [k, id] : qu[a])
if (e >= k) ans[id] = stiva[e - k + 1];
stiva[++e] = a;
for (const auto &it : vecini[a])
dfs(it);
e--;
}
int main() {
ifstream cin("stramosi.in");
ofstream cout("stramosi.out");
int n, a, b, m;
cin >> n >> m;
vector<int> roots;
for (int i = 1; i <= n; i++) {
cin >> a;
if (a)
vecini[a].emplace_back(i);
else roots.emplace_back(i);
}
for (int i = 0; i < m; i++) {
cin >> a >> b;
qu[a].emplace_back(b, i);
}
for (const int &root: roots)
dfs(root);
for (int i = 0; i < m; i++)
cout << ans[i] << " ";
}