#include<bits/stdc++.h>
using namespace std;
const int N =6e5+10;
int dep[N],f[N][23],fa[N][23],n,q;
vector<int> g[N];
int op=1;
void dfs(int u,int fath){
	dep[u]=dep[fath]+1,fa[u][0]=fath;
	for(int i=1;(1<<i)<=dep[u];i++)	fa[u][i]=fa[fa[u][i-1]][i-1];
	for(int i=0;i<g[u].size();i++){
		int v=g[u][i];
		if(v==fath)continue;
		dfs(v,u);
	}
}
int LCA(int x,int y){
	if(dep[x]<dep[y])	swap(x,y);
	int d=dep[x]-dep[y];
	
	if(op){
		for(int i=13;i>=0;i--)	if(d&(1<<i))	x=fa[x][i];
	}
	else{
		for(int i=20;i>=0;i--)	if(d&(1<<i))	x=fa[x][i];
	}
	
	if(x==y)	return x;
	if(op){
		for(int i=13;i>=0;i--)	if(fa[x][i]!=fa[y][i])	x=fa[x][i],y=fa[y][i];
	}
	else{
		for(int i=20;i>=0;i--)	if(fa[x][i]!=fa[y][i])	x=fa[x][i],y=fa[y][i];
	}
	return fa[x][0]	;
}
void init(){
	for(int i=1;i<=n;i++)	f[i][0]=i;
	for(int j=1;(1<<j)<=n;j++)
		for(int i=1;i+(1<<j)-1<=n;i++){
			f[i][j]=LCA(f[i][j-1],f[i+(1<<(j-1))][j-1]);
		}
}
int Q(int l,int r){
	
	int K=__lg(r-l+1);
	return LCA(f[l][K],f[r-(1<<K)+1][K]);
} 
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	cin>>n; if(n>=5000)	op=0;
	for(int i=1,u,v;i<n;i++)	cin>>u>>v,g[u].push_back(v),g[v].push_back(u);
	cin>>q;
	dfs(1,0),init();
	while(q--){
		int l,r,k,ans=0;
		cin>>l>>r>>k;
		for(int i=l;i+k-1<=r;i++){
			int L=i,R=i+k-1;
			ans=max(ans,dep[Q(L,R)]);
		}
		cout<<ans<<endl;
	}
}
/*
6
5 6
6 1
6 2
2 3
2 4
3
2 5 2
1 4 1
1 6 3
*/
