#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=5e5+5;
int n,q;
int deg[N];
struct Ed
{
	int to,nxt;
}ed[N*2];
int h[N],ec=-1;
void add(int fr,int to)
{
	ec++;
	ed[ec]={to,h[fr]};
	h[fr]=ec;
}
int d[N];
int sq[N*2],tot=0,S[N],E[N];
int st[N*2][21],lg[N*2];
void dfs(int cur,int fa)
{
	sq[++tot]=cur;
	S[cur]=E[cur]=tot;
	for(int i=h[cur];i!=-1;i=ed[i].nxt)
	{
		int v=ed[i].to;
		if(v==fa)
			continue;
		d[v]=d[cur]+1;
		dfs(v,cur);
		sq[++tot]=cur;	
		E[cur]=tot;
	}
}
int meg(int x,int y)
{
	if(x==0||y==0)
		return x+y;
	return d[x]>d[y]?y:x;
} 
void init()
{
	lg[1]=0;
	for(int i=2;i<=tot;i++)
	{
		lg[i]=lg[i>>1]+1;
	}
	for(int i=1;i<=tot;i++)
	{
		st[i][0]=sq[i];
	}
	for(int j=1;j<=21;j++)
	{
		for(int i=1;i+(1<<(j-1))-1<=tot;i++)
		{
			st[i][j]=meg(st[i][j-1],st[i+(1<<(j-1))][j-1]);
		}
	}
}
int lca(int x,int y)
{
	if(x==0||y==0)
		return x+y;
	if(x==y)
		return x;
	int L=min(S[x],S[y]),R=max(E[x],E[y]);
	int res=0;
	for(int i=L;i<R;i+=(1<<lg[R-i]))
	{
		res=meg(res,st[i][lg[R-i]]);
	}
	return res;
}
int sol(int l,int r,int k)
{
	int res=INT_MIN;
	for(int i=l;i<=r;i++)
	{
		int j=k+i-1;
		if(j>r)
			break;
		int ca=0;
		for(int X=i;X<=j;X++)
		{
			ca=lca(ca,X);
		}
//		printf("ca=%d\n",ca);
		res=max(res,d[ca]);
	}
	return res;
}
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	memset(h,-1,sizeof(h));
	scanf("%d",&n);
	for(int i=1;i<n;i++)
	{
		int u,v;
		scanf("%d%d",&u,&v);
		deg[u]++;
		deg[v]++;
		add(u,v); 
		add(v,u);
	}
	d[1]=1;
	dfs(1,0);
	init();
	scanf("%d",&q);
	while(q--)
	{
		int l,r,k;
		scanf("%d%d%d",&l,&r,&k);
		printf("%d\n",sol(l,r,k));
	}
}
