#include<iostream>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
vector<int>a[500005];
int fa[500005],dep[500005],n;
struct node{
	int id,fid;
};
int lca(int x,int y){
	if(dep[x]<dep[y])swap(x,y);
	while(dep[x]!=dep[y]){
		x=fa[x];
	}
	while(x!=y){
		x=fa[x],y=fa[y];
	}
	return x;
}
void TA(){
	int que;
	cin>>que;
	while(que--){
		int l,r,k;
		scanf("%d%d%d",&l,&r,&k);
		int ans=-1;
		for(int i=l;i+k-1<=r;i++){
			//int s=0;
			//for(int j=i;j<=i+k-1;j++)s=max(s,dep[j]);
			//if(s<ans)continue;
			int qq=n;
			for(int j=i;j<=i+k-1;j++){
				qq=min(qq,dep[j]);
			}
			ans=max(ans,qq);
		}
		printf("%d\n",ans);
	}
	return;
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	int que;
	cin>>n;
	for(int i=1;i<n;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		a[x].push_back(y);
		a[y].push_back(x);
	}
	queue<node>q;
	q.push({1,0});
	while(!q.empty()){
		node k=q.front();
		q.pop();
		fa[k.id]=k.fid;
		dep[k.id]=dep[k.fid]+1;
		for(int i=0;i<a[k.id].size();i++){
			if(dep[a[k.id][i]]==0)q.push({a[k.id][i],k.id});
		}
	}
	//for(int i=1;i<=n;i++){cout<<i<<' '<<dep[i]<<' '<<fa[i]<<endl;}
	int s=0;
	for(int i=1;i<=n;i++){
		if(a[i].size()==1)s++;
	}
	if(s==2)TA();
	cin>>que;
	while(que--){
		int l,r,k;
		cin>>l>>r>>k;
		int ans=-1;
		for(int i=l;i+k-1<=r;i++){
			int b=i;
			//int s=0;
			//for(int j=i;j<=i+k-1;j++)s=max(s,dep[j]);
			//if(s<ans)continue;
			for(int j=i+1;j<=i+k-1;j++){
				b=lca(b,j);
			}
			ans=max(ans,dep[b]);
		}
		cout<<ans<<endl;
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}
