#include<bits/stdc++.h>
using namespace std;
struct sbq{
	int l,r,k;
}a[500005];
int st[20][500005],lg[500005],mc[100];
int fir[500005],nex[1000005],to[1000005],tot=0;
int fa[500005],top[500005],dp[500005],sz[500005],son[500005];
void add(int x,int y){nex[++tot]=fir[x],to[tot]=y,fir[x]=tot;}
void dfs(int t){
	sz[t]=1;
	for(int i=fir[t];i;i=nex[i]){
		if(to[i]==fa[t]) continue;
		dp[to[i]]=dp[t]+1,fa[to[i]]=t;dfs(to[i]);sz[t]+=sz[to[i]];
		if(sz[to[i]]>sz[son[t]]) son[t]=to[i];
	}
}
void dfs1(int t){
	if(!son[t]) return ;
	top[son[t]]=top[t];dfs1(son[t]);
	for(int i=fir[t];i;i=nex[i]){
		if(to[i]==fa[t]||to[i]==son[t]) continue;
		top[to[i]]=to[i];dfs1(to[i]);
	}
}
int lca(int x,int y){
	if(top[x]==top[y]){
		if(dp[x]<dp[y]) return x;
		return y;
	}
	if(dp[top[x]]<dp[top[y]]) return lca(x,fa[top[y]]);
	return lca(fa[top[x]],y);
}
int ask(int l,int r){
	int len=lg[r-l+1];
	return lca(st[len][l],st[len][r-mc[len]+1]);
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	mc[0]=1;for(int i=1;i<=30;i++) mc[i]=mc[i-1]*2;
	for(int i=2;i<=500000;i++) lg[i]=lg[i>>1]+1;
	int n;cin>>n;
	for(int i=1;i<n;i++){
		int xx,yy;cin>>xx>>yy;
		add(xx,yy),add(yy,xx);
	}
	dp[1]=1,dfs(1),top[1]=1,dfs1(1);
	for(int i=1;i<=n;i++) st[0][i]=i;
	for(int len=1;len<20;len++) for(int i=1;i<=n-mc[len]+1;i++)
		st[len][i]=lca(st[len-1][i],st[len-1][i+mc[len-1]]);
	int m;cin>>m;
	for(int ii=1;ii<=m;ii++){
		cin>>a[ii].l>>a[ii].r>>a[ii].k;
		int ma=0;
		for(int i=a[ii].l;i<=a[ii].r-a[ii].k+1;i++)
			ma=max(ma,dp[ask(i,i+a[ii].k-1)]);
		cout<<ma<<endl;
	}
	return 0;
}
