#include<bits/stdc++.h>
#define N 500005
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
int n,q;
vector<int>mp[N];
int ans[N];
int st[20][N];
int son[N],top[N],sz[N],f[N],dep[N];
void dfs1(int u,int fa){
	sz[u]=1;
	f[u]=fa;
	dep[u]=dep[fa]+1;
	for(int v:mp[u]){
		if(v==fa)continue;
		dfs1(v,u);
		sz[u]+=sz[v];
		if(sz[son[u]]<sz[v])son[u]=v;
	}
}
void dfs2(int u,int tp){
	top[u]=tp;
	if(son[u])dfs2(son[u],tp);
	for(int v:mp[u]){
		if(v==son[u]||v==f[u])continue;
		dfs2(v,v);
	}
}
int lca(int x,int y){
	for(;top[x]!=top[y];){
		if(dep[top[x]]<dep[top[y]])swap(x,y);
		x=f[top[x]];
	}
	if(dep[x]<dep[y])return x;
	else return y;
}
void init(){
	for(int i=1;i<=n;i++)st[0][i]=i;
	for(int i=1;i<20;i++){
		for(int j=1;j+(1<<i)-1<=n;j++){
			st[i][j]=lca(st[i-1][j],st[i-1][j+(1<<(i-1))]);
		}
	}
}
int que(int l,int r){
	int o=__lg(r-l+1);
	return lca(st[o][l],st[o][r-(1<<o)+1]);
}
signed main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n;
	for(int i=1,u,v;i<n;i++){
		cin>>u>>v;
		mp[u].push_back(v),mp[v].push_back(u);
	}
	dfs1(1,1);
	dfs2(1,1);
	init();
	// cout<<que(2,4)<<endl;
	cin>>q;
	for(int l,r,k;q--;){
		cin>>l>>r>>k;
		int ans=0;
		for(int i=l;i+k-1<=r;i++)ans=max(ans,dep[que(i,i+k-1)]);
		cout<<ans<<'\n';
	}
	return 0;
}