#include<iostream>
#include<cstdio>
//#define int long long
#define endl "\n"
using namespace std;
const int N=5e5+5;
int hea[N],nex[N<<1],ve[N<<1],cnt;
void add(int u,int v){
//	cout<<u<<" "<<v<<endl;
	ve[++cnt]=v,nex[cnt]=hea[u],hea[u]=cnt;
}
int f[N][22],dep[N],lg[N];
void dfs(int u,int fa){
	f[u][0]=fa;dep[u]=dep[fa]+1;
//	cout<<"dfs"<<u<<endl;
	for(int i=1;i<=19;i++)f[u][i]=f[f[u][i-1]][i-1];
	for(int i=hea[u];i;i=nex[i]){
		int v=ve[i];
		if(v==fa)continue;
		dfs(v,u);
	}
}
int lca(int u,int v){
	if(dep[u]<dep[v])swap(u,v);
//	cout<<dep[v]<<" "<<v<<endl;
	for(int i=19;i>=0;i--){
		if(dep[f[u][i]]>=dep[v])u=f[u][i];
	}
//	cout<<"U"<<u<<" "<<v<<endl;
	if(u==v)return u;
	for(int i=19;i>=0;i--){
		if(f[u][i]!=f[v][i])u=f[u][i],v=f[v][i];
	}
	return f[u][0];
}
int g[N][22];
int query(int u,int v){
	int x=lg[v-u+1];
	return lca(g[u][x],g[v-(1<<x)+1][x]);
}
signed main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	cin.tie(0);cout.tie(0);
	ios::sync_with_stdio(false);
	int n;
	cin>>n;
	for(int i=1;i<n;i++){
		int u,v;
		cin>>u>>v;
		add(u,v);add(v,u);
	}
	for(int i=2;i<=n;i++)lg[i]=lg[i>>1]+1;
	dfs(1,0);
	for(int i=1;i<=n;i++)g[i][0]=i;
	for(int j=1;j<=lg[n];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]);
		}
	}
//	cout<<4<<" "<<5<<" "<<lca(4,5)<<endl;
	int q;
	cin>>q;
	while(q--){
		int l,r,k;
		cin>>l>>r>>k;
		int ans=-1e9;
		for(int i=l;i+k-1<=r;i++){
			int x=query(i,i+k-1);
//			cout<<x<<endl;
			ans=max(ans,dep[x]);
		}
		cout<<ans<<endl;
	}
}
