#include <bits/stdc++.h>
using namespace std;
int n,q,f[500010][20],dep[500010],st[500010][20];
vector<int> G[500010];
void dfs(int u,int fa){
	f[u][0]=fa,dep[u]=dep[fa]+1;
	for(int i=1;(1<<i)<dep[u];i++) f[u][i]=f[f[u][i-1]][i-1];
	for(int i=0;i<G[u].size();i++){
		int v=G[u][i];
		if(v==fa) continue ;
		dfs(v,u);
	}
} 
int lca(int a,int b){
	if(dep[a]<dep[b]) swap(a,b);
	if(b==1) return 1;
	for(int i=31-__builtin_clz(dep[a]-dep[b]);~i;i--) if(dep[a]-dep[b]>=(1<<i)) a=f[a][i];
	for(int i=31-__builtin_clz(dep[a]);~i;i--){
		if(f[a][i]!=f[b][i]){
			a=f[a][i],b=f[b][i];
		}
	}
	if(a==b) return a;
	return f[a][0];
}
int que(int l,int r){
	if(l==r) return dep[l];//cout<<l<<' '<<r<<endl;
	int t=31-__builtin_clz(r-l+1);//cout<<t<<endl;
	return min(dep[st[l][t]],dep[st[r-(1<<t)+1][t]]);//dep[lca(st[l][t],st[r-(1<<t)+1][t])];
}
int main(){//cout<<31-__builtin_clz(3);
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	cin>>n;
	for(int i=1;i<n;i++){
		int u,v;
		scanf("%d%d",&u,&v);
		G[u].push_back(v);
		G[v].push_back(u);
	}
	dfs(1,0);
	for(int i=n;i;i--){
		st[i][0]=i;
		for(int j=1;i+(1<<j)-1<=n;j++){
			st[i][j]=lca(st[i][j-1],st[i+(1<<j-1)][j-1]);
		}
	}
	cin>>q;
	while(q--){
		int l,r,k,res=0;
		scanf("%d%d%d",&l,&r,&k);
		for(int i=l;i+k-1<=r;i++) res=max(res,que(i,i+k-1));
		printf("%d\n",res);
	}
	return 0;
}

