#include <bits/stdc++.h>
using namespace std;

const int N = 1000010;
int h[N],e[N],ne[N],idx;
void add(int a,int b)
{
	e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
int n,q;int st[N][23],lg[N],de[N];
int dep[N],fath[N];
void dfs(int u,int f)
{
	dep[u]=dep[f]+1;
	st[u][0]=f;
	for(int i=h[u];i!=-1;i=ne[i])
	{
		if(e[i]!=f) dfs(e[i],u);
	}
}

int lca(int l,int r)
{
	int mi=(int)1e9;
	for(int i=l;i<=r;i++) mi=min(mi,dep[i]),de[i]=i;
	for(int i=l;i<=r;i++)
	{
		int k=dep[i]-mi;
		for(int j=22;j>=0;j--)
		{
			if(k&(1<<j)) de[i]=st[de[i]][j];
		}
	}
	bool f=1;
	for(int i=l;i<=r;i++)
	{
		if(de[i]!=de[l])
		{
			f=0;
			break;
		}
	}
	if(f) return de[l];
	for(int j=22;j>=0;j--)
	{
		bool fl=1;
		for(int i=l;i<=r;i++)
		{
			if(st[de[i]][j]!=st[de[l]][j])
			{
				fl=0;
				break;
			}
		}
		if(fl) continue;
		for(int i=l;i<=r;i++) de[i]=st[de[i]][j];
	}
	return st[de[l]][0];
 } 
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	memset(h,-1,sizeof h); 
	for(int i=1;i<=n-1;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		add(x,y);add(y,x);
	}
	dfs(1,1);
	for(int i=1;i<=22;i++)
	{
		for(int j=1;j<=n;j++) st[j][i]=st[st[j][i-1]][i-1];
	}
	scanf("%d",&q);
	while(q--)
	{
		int l,r,k;
		scanf("%d%d%d",&l,&r,&k);
		int mx=0;
		for(int i=l;i+k-1<=r;i++)
		{
			mx=max(mx,dep[lca(i,i+k-1)]);
		}
		printf("%d\n",mx);
	}
	return 0;
}
/*
6
5 6
6 1
6 2
2 3
2 4
3
2 5 2
1 4 1
1 6 3
*/
