#include<bits/stdc++.h>
using namespace std;
int n,q;
vector<int> g[500011];
int st[20][500011];
int fa[500011][20];
int dep[500011],LOG2[500011],POW2[500011];
void dfs(int u){
	for(int i=1;i<=LOG2[n];i++)fa[u][i]=fa[fa[u][i-1]][i-1];
	for(int v:g[u]){
		if(v!=fa[u][0]){dep[v]=dep[u]+1,fa[v][0]=u;dfs(v);}
	}
}
int lca(int x,int y){
	if(dep[x]<dep[y])swap(x,y);
	for(int i=LOG2[n];i>=0;i--){
		if(dep[fa[x][i]]>=dep[y])x=fa[x][i];
	}
	if(x==y)return y;
	for(int i=LOG2[n];i>=0;i--){
		if(fa[x][i]!=fa[y][i])x=fa[x][i],y=fa[y][i];
	}
	x=fa[x][0],y=fa[y][0];
	return x;
}
int get_st(int l,int r){
	int sz=(r-l+1);
	int sp=LOG2[sz];
	return lca(st[sp][l],st[sp][r-POW2[sp]+1]);
}
int get_min(int l,int r){
	int sz=(r-l+1);
	int sp=LOG2[sz];
	return min(st[sp][l],st[sp][r-POW2[sp]+1]);
}
bool check(){
	for(int i=1;i<=n;i++)if(g[i].size()>=3)return 0;
	return 1;
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	cin>>n;
	LOG2[1]=0,POW2[0]=1;
	for(int i=2;i<=n;i++)LOG2[i]=LOG2[i/2]+1;
	for(int i=1;i<=32;i++)POW2[i]=POW2[i-1]*2;
	for(int i=1,x,y;i<n;i++)cin>>x>>y,g[x].push_back(y),g[y].push_back(x);
	dep[1]=1;
	dfs(1);
	if(check()){
		for(int i=1;i<=n;i++)st[0][i]=dep[i];
		for(int i=1;i<=LOG2[n];i++)
		for(int j=1;j<=n;j++)
			st[i][j]=min(st[i-1][j],st[i-1][j+(1<<(i-1))]);
		cin>>q;
		while(q--){
			int l,r,k;
			cin>>l>>r>>k;
			int ans=1;
			for(int i=l;i+k-1<=r;i++){
				int sp=i,sq=i+k-1;
				ans=max(ans,dep[get_min(sp,sq)]);
			}
			cout<<ans<<"\n";
		}
		return 0;
	}
	for(int i=1;i<=n;i++)st[0][i]=i;
	for(int i=1;i<=LOG2[n];i++)
	for(int j=1;j<=n;j++)
		st[i][j]=lca(st[i-1][j],st[i-1][j+(1<<(i-1))]);
	cin>>q;
	while(q--){
		int l,r,k;
		cin>>l>>r>>k;
		int ans=1;
		for(int i=l;i+k-1<=r;i++){
			int sp=i,sq=i+k-1;
			ans=max(ans,dep[get_st(sp,sq)]);
		}
		cout<<ans<<"\n";
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}

