#include<bits/stdc++.h>
using namespace std;
int n,e;
vector<int> q[500005];
int lg[500005][20];
int deep[500005],cnt[500005];
void dfs(int x,int fa){
	deep[x]=deep[fa]+1;
	for(int i=0;i<q[x].size();i++){
		dfs(q[x][i],x);
	}
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	cin>>n>>e;
	for(int i=1;i<n;i++){
		int u,v;
		q[u].push_back(v);
		cnt[v]++;
	}
	for(int i=1;i<=n;i++){
		if(cnt[i]==0){
			dfs(i,0);
		}
	}
	for(int i=1;i<=n;i++){
		lg[i][0]=deep[i];
	}
	for(int i=1;i<=n;i++){
		for(int j=1;i+(1<<(j-1))<=n;j++){
			lg[i][j]=min(lg[i][j-1],lg[lg[i][j-1]][j-1]);
		}
	}
	for(int i=1;i<=e;i++){
		int l,r,k;
		cin>>l>>r>>k;
		int maxx=-1;
		for(int j=l;j+k<=r;j++){
			int minn=0x3f3f3f;
			for(int h=0;h<k;h++){
				minn=min(minn,deep[h+j]);
			}
			maxx=max(maxx,minn);
		}
		cout<<maxx<<endl;
	}
	return 0;
}
