#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10;
int n,dep[N],f[N][32],q,g[N][32],lg[N];
vector<int>a[N];
void dfs(int x,int fa) {
	dep[x]=dep[fa]+1,f[x][0]=fa;
	for(int i=1;i<=30;i++)
	    f[x][i]=f[f[x][i-1]][i-1];
	for(auto v:a[x]) {
		if(v==fa) continue ;
		dfs(v,x); 
	}
}
int lca(int u,int v) {
	if(dep[u]<dep[v]) swap(u,v);
	for(int i=30;i>=0;i--)
	    if(dep[f[u][i]]>=dep[v]) u=f[u][i];
	if(u==v) return u;
	for(int i=30;i>=0;i--)
	    if(f[u][i]!=f[v][i]) u=f[u][i],v=f[v][i];
	return f[u][0]; 
} 
void solve() {
	scanf("%d",&n);
	for(int i=1;i<n;i++) {
		int u,v;
		scanf("%d%d",&u,&v);
		a[u].push_back(v),a[v].push_back(u);
	}
	dfs(1,0);
	for(int i=1;i<=n;i++) g[i][0]=i;
	for(int j=1;j<=30;j++)
	    for(int i=1;i+(1<<j)-1<=n;i++)
	        g[i][j]=lca(g[i][j-1],g[i+(1<<(j-1))][j-1]);
	for(int j=0;(1<<j)<=n;j++)
	    lg[1<<j]=j;
	for(int i=1;i<=n;i++)
	    if(lg[i]==0) lg[i]=lg[i-1];
	scanf("%d",&q);
	while(q--) {
		int l,r,k,ans=0;
		scanf("%d%d%d",&l,&r,&k);
		for(int i=l;i+k-1<=r;i++) {
			int d=lg[k];
			int lc=lca(g[i][d],g[i+k-(1<<d)][d]);
			if(dep[lc]>ans) ans=dep[lc];
		}
		printf("%d\n",ans);
	} 
}
signed main() {
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	int t=1;
	while(t--) solve();
	return 0;
}

