#pragma GCC optimize("Ofast")
#pragma GCC target("popcnt,avx2")
#pragma GCC optimize("unroll-loops")
#include <iostream>
#include <fstream>
using namespace std;
constexpr int NMAX = 250000;
constexpr int POW2 = 17;
int mat[POW2 + 1][NMAX + 1];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
ifstream in("stramosi.in");
ofstream out("stramosi.out");
int n, m;
in >> n >> m;
for(int i = 1; i <= n; ++i)
in >> mat[0][i];
// Binary lifting: mat[k][i] = stramosul la distanta 2^k al lui i
for(int k = 1; k <= POW2; ++k)
for(int i = 1; i <= n; ++i)
mat[k][i] = mat[k - 1][mat[k - 1][i]];
for(int q = 0; q < m; ++q) {
int node, dist;
in >> node >> dist;
for(int k = POW2; k >= 0; --k) {
if(dist >= (1 << k)) {
node = mat[k][node];
dist -= (1 << k);
if(node == 0) break;
}
}
out << node << '\n';
}
return 0;
}