#include<bits/stdc++.h>
using namespace std;
const int maxn=5e5+5;
int n;
struct edge
{
	int a,b;
}e[maxn<<1];
int head[maxn],cnt=0;
void add(int a,int b)
{
	e[++cnt]={b,head[a]};
	head[a]=cnt;
}
int dep[maxn],dp[27][maxn];
void dfs(int u,int fa)
{
	dp[0][u]=fa;
	dep[u]=dep[fa]+1;
	for(int i=head[u];i;i=e[i].b)
	{
		int a=e[i].a;
		if(a==fa)
		{
			continue;
		}
		dfs(a,u);
	}
}
int init_lca()
{
	for(int i=1;i<=25;i++)
	{
		for(int j=1;j<=n;j++)
		{
			dp[i][j]=dp[i-1][dp[i-1][j]];
		}
	}
}
int lg[maxn];
void init_lg()
{
	for(int i=2;i<=maxn-5;i++)
	{
		lg[i]=lg[i>>1]+1;
	}
}
int lca(int x,int y)
{
	if(dep[x]<dep[y])
	{
		swap(x,y);
	}
	while(dep[x]>dep[y])
	{
		x=dp[lg[dep[x]-dep[y]-1]][x];
	}
	if(x==y)
	{
		return x;
	}
	for(int i=lg[dep[x]]+1;i>=0;i--)
	{
		if(dp[i][x]!=dp[i][y])
		{
			x=dp[i][x],y=dp[i][y];
		}
	}
	return dp[0][x];
}
int maxx[27][maxn];
void init_st()
{
	for(int i=1;i<=n;i++)
	{
		maxx[0][i]=i;
	}
	for(int i=1;i<=25;i++)
	{
		for(int j=1;j+(1<<i)-1<=n;j++)
		{
			maxx[i][j]=lca(maxx[i-1][j],maxx[i-1][j+(1<<(i-1))]);
		}
	}
}
int query(int l,int r)
{
	int s=lg[r-l+1];
	return lca(maxx[s][l],maxx[s][r-(1<<s)+1]);
}
int main()
{
	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(false);
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	init_lg();
	cin>>n;
	for(int i=1,a,b;i<n;i++)
	{
		cin>>a>>b;
		add(a,b);add(b,a);
	}
	dep[0]=0;
	dfs(1,0);init_lca();init_st();
	int q,l,r,k;
	cin>>q;
	while(q--)
	{
		cin>>l>>r>>k;
		int ans=0;
		for(int i=l;i+k-1<=r;i++)
		{
			int anss=query(i,i+k-1);
			if(dep[ans]<dep[anss])
			{
				ans=anss;
			}
		}
		cout<<dep[ans]<<'\n';
	}
}
