#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5;
int n,Q;
vector<int> g[N];
int dep[N],fa[21][N];
void Dfs(int u,int la)
{
	fa[0][u]=la;
	dep[u]=dep[la]+1;
	for(int i=1;i<=19;i++)
		fa[i][u]=fa[i-1][fa[i-1][u]];
	for(int v: g[u])
		if(v!=la) Dfs(v,u);
}
int Lca(int x,int y)
{
	if(dep[x]<dep[y]) swap(x,y);
	int t=dep[x]-dep[y];
	for(int i=19;i>=0;i--)
		if(t&(1<<i)) x=fa[i][x];
	if(x==y) return x;
	for(int i=19;i>=0;i--)
		if(fa[i][x]!=fa[i][y])
			x=fa[i][x],y=fa[i][y];
	return fa[0][x];
}
int par[5005][5005];
void Solve1()
{
	for(int i=1;i<=n;i++)
	{
		par[i][i]=i;
		for(int j=i+1;j<=n;j++)
			par[i][j]=Lca(par[i][j-1],j);
	}
	scanf("%d",&Q);
	int l,r,k;
	while(Q--)
	{
		scanf("%d%d%d",&l,&r,&k);
		int ans=-1e9;
		for(int i=l+k-1;i<=r;i++)
			ans=max(ans,dep[par[i-k+1][i]]);
		printf("%d\n",ans);
	}
}
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	for(int u,v,i=1;i<n;i++)
	{
		scanf("%d%d",&u,&v);
		g[u].push_back(v);
		g[v].push_back(u);
	}
	Dfs(1,0);
	if(n<=5000) { Solve1(); return 0; }
	return 0;
}
/*
6
5 6
6 1
6 2
2 3
2 4
3 
2 5 2
1 4 1
1 6 3

Autumn_Rain，这里是烛火，不要放弃 
*/
