#include<bits/stdc++.h>
using namespace std;
const int N=5e5+1;
int n,q;
vector<int>E[N];
int lg[N],g[N][20],fa[N][20],d[N],deg[N];
inline int lca(int x,int y){
	if(d[y]>d[x])
		swap(x,y);
	for(int i=19;i>=0;i--)
		if(d[fa[x][i]]>=d[y])
			x=fa[x][i];
	if(x==y)
		return x;
	for(int i=19;i>=0;i--)
		if(fa[x][i]!=fa[y][i])
			x=fa[x][i],y=fa[y][i];
	return fa[x][0];
}
void dfs(int u,int pa){
	d[u]=d[pa]+1;
	for(int i=0;i<E[u].size();i++){
		int v=E[u][i];
		if(v==pa)
			continue;
		fa[v][0]=u;
		for(int j=1;j<20;j++)
			fa[v][j]=fa[fa[v][j-1]][j-1];
		dfs(v,u);
	}
}
inline int ask(int l,int r){
	int k=lg[r-l+1];
	return lca(g[l][k],g[r-(1<<k)+1][k]);
}
inline int qry(int l,int len){
	return ask(l,l+len-1);
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	ios::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL);
	cin>>n;
	lg[0]=-1;
	lg[1]=0;
	for(int i=2;i<=n;i++){
		lg[i]=lg[i>>1]+1;
		int x,y;
		cin>>x>>y;
		deg[x]++,deg[y]++;
		E[x].push_back(y);
		E[y].push_back(x);
	}
	dfs(1,0);
	for(int i=1;i<=n;i++)
		g[i][0]=i;
	for(int i=1;i<=19;i++){
		for(int j=1;j+(1<<i)-1<=n;j++)
			g[j][i]=lca(g[j][i-1],g[j+(1<<i-1)][i-1]);
	}
	cin>>q;
	while(q--){
		int l,r,k;
		cin>>l>>r>>k;
		int ans=0;
		for(int i=l;i<=r-k+1;i++)
			ans=max(ans,d[qry(i,k)]);
		cout<<ans<<"\n";
	}
	return 0;
}
/*
11 10
1 2
1 3
2 4
2 5
2 6
3 7
3 8
5 9
5 10
5 11
*/
