#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
vector<int>e[N];
int tsp;
int dfn[N],n,st[N][40],dep[N],lg[40];
void dfs(int x,int fa){
	dep[x]=dep[fa]+1;
	tsp++;
	dfn[x]=tsp;
//	cout<<x<<" E "<<fa<<" "<<dep[x]<<endl;
	st[tsp][0]=dep[x];
	
	for(int i=0;i<e[x].size();i++){
		int y=e[x][i];
		if(y==fa)continue;
		dfs(y,x);
//		tsp++;
	}
	tsp++;
	st[tsp][0]=dep[x]-1;
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	lg[1]=0;
	cin>>n;
	for(int i=2;i<=n*2;i++){
		lg[i]=lg[i>>1]+1;
	}
	for(int i=1;i<n;i++){
		int x,y;
		cin>>x>>y;
		e[x].push_back(y);
		e[y].push_back(x);
	}
	dfs(1,1);
//	for(int i=1;i<=n;i++){ 
	for(int i=1;i<=30;i++){
		for(int j=1;j+(1<<i)-1<=tsp;j++){
			st[j][i]=min(st[j][i-1],st[j+(1<<(i-1))][i-1]);
		}
	}
	int q;
	cin>>q;
	for(int i=1;i<=q;i++){
		int l,r,K;
		cin>>l>>r>>K;
		int ans=0;
		int ans2=1e9;
		for(int j=l;j+K-1<=r;j++){
			int mn=2*N,mx=0;
			for(int k=j;k<=j+K-1;k++){
				mn=min(mn,dfn[k]);
				mx=max(dfn[k],mx);
			}
			int og=lg[mx-mn+1];
//			if(og>10)exit(0);
			if(mx<(1<<og))exit(0);
			
			ans=max(ans,min(st[mn][og],st[mx-(1<<og)+1][og]));
//			cout<<mx<<" "<<mn<<" "<<ans<<endl;
			if(ans==0){
//				cout<<mx<<" "<<mn<<endl;
//				cout<<st[mn][og]<<" "<<st[mx][og]<<endl;
//				cout<<og<<endl;
			}
		}
		cout<<ans<<endl;
//		cout<<i<<" "<<q<<endl;
	}
	return 0;
}

