// Problem G : My Ancestor
// Problem setting and Solution by Steven & Felix Halim
// ACM-ICPC Thailand 2009 : August 2009
#include <stdio.h>
#include <vector>
#include <algorithm>

using namespace std;

#define MAXN 200001
#define MAXQ 100001

int P[MAXN], L[MAXN], QP[MAXQ][2], N, Q;
vector<int> A[MAXN], C[MAXN];

int bs(int hi, int lev){
	int lo = 0, res = -1;
	while (lo<=hi){
		int mid = (lo+hi)/2;
		if (L[P[mid]] >= lev){
			res = mid;
			hi = mid-1;
		} else {
			lo = mid+1;
		}
	}
	return P[res];
}

void dfs(int idx, int cur){
	P[idx] = cur;
	reverse(A[cur].begin(), A[cur].end());
	for (int i=0; i<A[cur].size(); i++) A[cur][i] = bs(idx+1,A[cur][i]);
	for (int i=0; i<C[cur].size(); i++) dfs(idx+1, C[cur][i]);
}

int main(){
	while (scanf("%d %d",&N,&Q)!=EOF){
		for (int i=0; i<N; i++) C[i].clear();

		P[0] = -1; L[0] = 1;
		for (int i=1; i<N; i++){
			scanf("%d %d",&P[i],&L[i]);
			C[P[i]].push_back(i);
			A[i].clear();
		}

		for (int i=0; i<Q; i++){
			scanf("%d %d",&QP[i][0],&QP[i][1]);
			A[QP[i][0]].push_back(QP[i][1]);
		}

		dfs(0,0);

		for (int i=0; i<Q; i++){
			printf("%d\n",A[QP[i][0]].back());
			A[QP[i][0]].pop_back();
		}
	}
}

