#include<bits/stdc++.h>
using namespace std;
int n;
vector<int> t[2000001];
long long dep[2000001];
int q,l,r,k;
long long deq[2000001];
long long head,tail;
long long ans;
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	cin>>n;
	int a,b;
	for(int i=1;i<n;i++)
	{
		scanf("%d%d",&a,&b);
		t[a].push_back(b);
		t[b].push_back(a);
	}
	dep[1]=0;
	int las=1,now=t[1][0];
	dep[now]=dep[las]+1;
	while(t[now].size()>1)
	{
		for(int i=0;i<t[now].size();i++)
		{
			if(las!=t[now][i])
			{
				las=now;
				now=t[now][i];
				break;
			}
		}
		dep[now]=dep[las]+1;
	}
	cin>>q;
	deq[0]=-1;
	for(int i=1;i<=q;i++)
	{
		scanf("%d%d%d",&l,&r,&k);
		head=1;
		tail=1;
		ans=INT_MIN;
		for(int j=l;j<=l+k-1;j++)
		{
			while(head<tail&&dep[deq[tail-1]]>=dep[j])
			{
				tail--;
			}
			deq[tail]=j;
			tail++;
		}
		ans=max(ans,dep[deq[head]]);
		for(int j=l+k;j<=r;j++)
		{
			while(head<tail&&deq[head]<=(j-k))
			{
				head++;
			}
			while(head<tail&&dep[deq[tail-1]]>=dep[j])
			{
				tail--;
			}
			deq[tail]=j;
			tail++;
			ans=max(ans,dep[deq[head]]);
		}
		cout<<ans<<endl;
	}
	return 0;
}
