#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5;
int head[N],cnt,dfn[N],ct,dep[N],f[N][30],id[N],mx[N][30],mn[N][30];
struct edge{int to,nxt;}e[N<<1];
void add(int u,int v){e[++cnt]={v,head[u]},head[u]=cnt;}
void dfs(int u,int fa){dep[u]=dep[fa]+1,f[u][0]=fa,dfn[u]=++ct,id[ct]=u;
	for(int i=1;i<=25;i++)f[u][i]=f[f[u][i-1]][i-1];
	for(int i=head[u];i;i=e[i].nxt)
		if(e[i].to^fa)dfs(e[i].to,u);
}
int lca(int x,int y){if(dep[x]<dep[y])swap(x,y);
	for(int i=25;~i;i--)if(dep[f[x][i]]>=dep[y])x=f[x][i];if(x==y)return x;
	for(int i=25;~i;i--)if(f[x][i]!=f[y][i])x=f[x][i],y=f[y][i];return f[x][0];
}
int main(){
	freopen("query.in","r",stdin);freopen("query.out","w",stdout);
	int n;cin>>n;
	for(int i=1,u,v;i<n;i++)cin>>u>>v,add(u,v),add(v,u);dfs(1,0);
	for(int i=1;i<=n;i++)mx[i][0]=mn[i][0]=dfn[i];
	for(int i=1;i<=25;i++)
		for(int j=1;j+(1<<i-1)<=n;j++)
			mx[j][i]=max(mx[j][i-1],mx[j+(1<<i-1)][i-1]),
			mn[j][i]=min(mn[j][i-1],mn[j+(1<<i-1)][i-1]);
	int q;cin>>q;
	while(q--){int l,r,k,ans=0;cin>>l>>r>>k;int len=log2(k);
		for(int i=l;i+k-1<=r;i++)
			ans=max(ans,dep[lca(id[max(mx[i][len],mx[i+k-1-(1<<len)+1][len])],id[min(mn[i][len],mn[i+k-1-(1<<len)+1][len])])]);
		cout<<ans<<endl;
	}
	return 0;
}
/*
6
5 6
6 1
6 2
2 3
2 4
3
2 5 2
1 4 1
1 6 3

*/
