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

const int N=5e5+5;
int n,Q;
int dep[N],fa[N][20],f[N][20];
int tt,st[N],nx[N*2],to[N*2];

void add(int u,int v){
	to[++tt]=v,nx[tt]=st[u],st[u]=tt;
}

void dfs(int u)
{
	dep[u]=dep[fa[u][0]]+1;
	for(int i=1;(1<<i)<dep[u];i++)
		fa[u][i]=fa[fa[u][i-1]][i-1];
	for(int i=st[u];i;i=nx[i])
	{
		int v=to[i];
		if(v==fa[u][0]) continue;
		fa[v][0]=u;
		dfs(v);
	}
}
int getlca(int x,int y)
{
	if(x==y) return x;
	if(dep[x]<dep[y]) swap(x,y);
	for(int i=19;~i;i--)
		if(dep[x]-(1<<i)>=dep[y])
			x=fa[x][i];
	if(x==y) return x;
	for(int i=19;~i;i--)
		if(fa[x][i]!=fa[y][i])
			x=fa[x][i],y=fa[y][i];
	return fa[x][0];
}

int ask(int l,int r)
{
	int k=__lg(r-l+1);
	return getlca(f[l][k],f[r-(1<<k)+1][k]);
}

int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	
	scanf("%d",&n);
	for(int i=1;i<n;i++)
	{
		int u,v;
		scanf("%d%d",&u,&v);
		add(u,v);
		add(v,u);
	}
	
	dfs(1);
	
	for(int i=1;i<=n;i++)
		f[i][0]=i;
	for(int i=1;(1<<i)<=n;i++)
		for(int j=1;j+(1<<i)-1<=n;j++)
			f[j][i]=getlca(f[j][i-1],f[j+(1<<i-1)][i-1]);
	
//	printf("%d",__lg(1));return 0;
	
	scanf("%d",&Q);
	while(Q--)
	{
		int l,r,K;
		scanf("%d%d%d",&l,&r,&K);
		
		int ans=0;
		for(int i=l;i+K-1<=r;i++)
		{
//			printf("%d %d %d\n",l,i+K-1,ask(l,i+K-1));
			ans=max(ans,dep[ask(i,i+K-1)]);
		}
		printf("%d\n",ans);
	}
	return 0;
}
