Link to this code: https://cses.fi/paste/65ef3a810b1af4482a419a/
#include <bits/stdc++.h>
 
using namespace std;

typedef long long             ll;
typedef pair<int, int>        pii;
typedef pair<ll, ll>          pll;
typedef pair<string, string>  pss;
typedef vector<int>           vi;
typedef vector<string>        vs;
typedef vector<bool>          vb;
typedef vector<vi>            vvi;
typedef vector<pii>           vpi;
typedef vector<ll>            vl;
typedef vector<vl>            vvl;
typedef queue<int> 			  qi;
typedef queue<pii>            qpi;
typedef vector<char>          vc;
typedef tuple<int, int, int>  tiii;
typedef vector<tiii>         vtiii;
                          
#define pb                             push_back
#define ppb							   pop_back
#define pf							   push_front
#define ppf							   pop_front
#define all(x)					       (x).begin(), (x).end()
#define allArr(arr, sz)				   arr, arr + sz
#define fr                             first
#define sc                             second
#define mp                             make_pair
#define resetINT(row, col, constant)   resize (row, vi (col, constant))
#define resetLL(row, col, constant)   resize (row, vl (col, constant))
#define resetBOOL(row, col, constant)  resize (row, vb (col, constant))
#define resetSTR(row, col, constant)   resize (row, vs (col, constant))
#define FOR(a, b, c)                   for (int(a) = (b); (a) < (c); ++(a))
#define FORN(a, b, c)                  for (int(a) = (b); (a) <= (c); ++(a))
#define FORD(a, b, c)                  for (int(a) = (b); (a) >= (c); --(a))
#define FORSQ(a, b, c)                 for (int(a) = (b); (a) * (a) <= (c); ++(a))
#define FORC(a, b, c)                  for (char(a) = (b); (a) <= (c); ++(a))
#define FOREACH(a, b)                  for (auto&(a) : (b))
#define REP0(i, n)                     FOR(i, 0, n)
#define REP1(i, n)                     FOR(i, 1, n)
#define REP0N(i, n)                    FORN(i, 0, n)
#define REP1N(i, n)                    FORN(i, 1, n)
#define MAX(a, b)                      a = max(a, b)
#define MIN(a, b)                      a = min(a, b)
#define sortVec(v)					   sort(all(v))
#define reverse(v)                     reverse(all(v))
#define sortArr(arr)				   sort(allArr(arr, sz))
#define sz(x)						   (int)((x).size())
#define tc(t)						   while(t--)
#define perm						   next_permutation
#define ppc 						   __builtin_popcount
#define ppcll						   __builtin__popcountll
 
// const int MOD1 = (int) 1e9 + 7;
// const int MOD2 = 998244353;
// const ll LINF = (ll) 2e18;
// const int IINF = (int) 2e9;


int main() {
	ios_base::sync_with_stdio(false); 
	cin.tie(0); 

	int t{1};
	//cin >> t;
	tc (t) {
		int n, q;
		cin >> n >> q;

		vvi dp(n + 1, vi (31));

		vb loop(n + 1, false);
		REP1N (i, n) {
			cin >> dp[i][0];
			loop[i] = i == dp[i][0];
	 	}

		REP1N (k, 30) {
			REP1N (x, n) {
				dp[x][k] = dp[dp[x][k - 1]][k - 1];
			}
		}

		int x, k;

		REP0 (i, q) {
			cin >> x >> k;
			int go = 0;
			while (k && !loop[x]) {
				if (k & 1){
					x = dp[x][go]; 
				}
				go++;
				k >>= 1;
			}

			cout << x << "\n";
		}
	}


	return 0;
}