#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5;
const int M=1e6+5;
const int LG=21;
int n,q,u,v,l,r,k,cnt,ans,to[M],nxt[M],h[N],dep[N],f[N][LG],Log[N],ywl[N][LG];
void save(int u,int v){
	to[++cnt]=v;
	nxt[cnt]=h[u];
	h[u]=cnt;
}
void dfs(int u,int fa){
	dep[u]=dep[fa]+1;
	for(int i=1;i<=20;i++) f[u][i]=f[f[u][i-1]][i-1];
	for(int i=h[u];i;i=nxt[i]){
		if(to[i]==fa) continue;
		f[to[i]][0]=u;
		dfs(to[i],u);
	}
}
int lca(int u,int v){
	if(dep[u]<dep[v]) swap(u,v);
	for(int i=Log[dep[u]]+1;i>=0;i--) if(dep[f[u][i]]>=dep[v]) u=f[u][i];
	if(u==v) return u;
	for(int i=Log[dep[u]]+1;i>=0;i--){
		if(f[u][i]!=f[v][i]){
			u=f[u][i];
			v=f[v][i];
		}
	}
	return f[u][0];
}
int query(int l,int r){
	int k=Log[r-l+1];
	return lca(ywl[l][k],ywl[r-(1<<k)+1][k]);
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<n;i++){
		scanf("%d%d",&u,&v);
		save(u,v);
		save(v,u);
	}
	for(int i=2;i<=n;i++) Log[i]=Log[i>>1]+1;
	dfs(1,0);
	for(int i=1;i<=n;i++) ywl[i][0]=i;
	for(int j=1;j<=Log[n];j++){
		for(int i=1;i<=n-(1<<j)+1;i++){
			ywl[i][j]=lca(ywl[i][j-1],ywl[i+(1<<(j-1))][j-1]);
		}
	}
	scanf("%d",&q);
	while(q--){
		scanf("%d%d%d",&l,&r,&k);
		ans=0;
		for(int i=l;i<=r-k+1;i++) ans=max(ans,dep[query(i,i+k-1)]);
		printf("%d\n",ans);
	}
	return 0;
}
