#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5;
int n,mn[20][N],mx[20][N],st[20][N],d[N],idx,in[N],T,l,r,k;
vector<int>g[N];
void dfs(int x,int y)
{
	in[x]=++idx;
	mn[0][x]=mx[0][x]=in[x];
	st[0][in[x]]=d[x]=d[y]+1;
	for(int v:g[x])
		if(v^y)
			dfs(v,x);
}
int askmx(int l,int r,int st[][N])
{
	int k=__lg(r-l+1);
	return max(st[k][l],st[k][r-(1<<k)+1]);
}
int askmn(int l,int r,int st[][N])
{
	int k=__lg(r-l+1);
	return min(st[k][l],st[k][r-(1<<k)+1]);
}
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	for(int i=1,u,v;i<n;i++)
		scanf("%d%d",&u,&v),g[u].push_back(v),g[v].push_back(u);
	dfs(1,0);
	scanf("%d",&T);
	for(int i=1;i<20;i++)
	{
		for(int j=1;j+(1<<i)-1<=n;j++)
		{
			mn[i][j]=min(mn[i-1][j],mn[i-1][j+(1<<i-1)]);
			mx[i][j]=max(mx[i-1][j],mx[i-1][j+(1<<i-1)]);
			st[i][j]=min(st[i-1][j],st[i-1][j+(1<<i-1)]);
		}
	}
	while(T--)
	{
		scanf("%d%d%d",&l,&r,&k);
		int s=0;
		for(int i=l;i+k-1<=r;i++)
		{
			if(k==1)
				s=max(s,d[i]);
			else
				s=max(s,askmn(askmn(i,i+k-1,mn)+1,askmx(i,i+k-1,mx),st)-1);
		}
		printf("%d\n",s);
	}
}
