#include <bits/stdc++.h>
using namespace std;
int n,dep[500005],lg[500005],dp[500005][25],st[500005][25];
vector<int> v[500005];
void dfs(int x,int fa)
{
	dep[x]=dep[fa]+1;
	dp[x][0]=fa;
	for(int i=1;i<25;i++)
		dp[x][i]=dp[dp[x][i-1]][i-1];
	for(auto i:v[x])
		if(i!=fa)
			dfs(i,x);
}
int query(int x,int y)
{
	if(dep[x]<dep[y]) swap(x,y);
	while(dep[x]>dep[y])
		x=dp[x][lg[dep[x]-dep[y]]];
	if(x==y) return x;
	for(int i=24;i>=0;i--)
	{
		if(dp[x][i]!=dp[y][i])
		{
			x=dp[x][i];
			y=dp[y][i];
		}
	}
	return dp[x][0];
}
int query1(int l,int r)
{
	int s=lg[r-l+1];
	return query(st[l][s],st[r-(1<<s)+1][s]);
}
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	for(int i=2;i<=500000;i++) lg[i]=lg[i>>1]+1;
	cin>>n;
	for(int i=1;i<n;i++)
	{
		int x,y;
		cin>>x>>y;
		v[x].push_back(y);
		v[y].push_back(x);
	}
	dfs(1,0);
	for(int i=1;i<=n;i++) st[i][0]=i;
	for(int j=1;j<25;j++)
	{
		for(int i=1;i<=(n-(1<<(j-1))+1);i++)
		{
			st[i][j]=query(st[i][j-1],st[i+(1<<(j-1))][j-1]);
		}
	}
	int q;
	cin>>q;
	while(q--)
	{
		int l,r,k,ans=0;
		cin>>l>>r>>k;
		for(int i=l;i<=r-k+1;i++)
		{
			ans=max(ans,dep[query1(i,i+k-1)]);
		}
		cout<<ans<<'\n';
	}
}
