#include<stdio.h>//9:22-9:38 持续耳鸣 
#include<iostream>//昨晚失眠到凌晨 1:00 才睡 
using namespace std;//其实我也不知道为何还要靠近你 
int n,u,v;
struct edge
{
	int to,nxt;
}e[1000005];
int head[500005],cnt;
void add(int u,int v)
{
	e[++cnt].to=v;
	e[cnt].nxt=head[u];
	head[u]=cnt;
	return;
}
int tot,dfn[500005],fa[500005],dep[500005],top[500005],size[500005],son[500005];
void dfs1(int u,int f,int depth)
{
	dfn[u]=++tot;
	size[u]=1;
	fa[u]=f;
	dep[u]=depth;
	for(int i=head[u];i;i=e[i].nxt)
	{
		int v=e[i].to;
		if(v!=fa[u])
		{
			dfs1(v,u,depth+1);
			size[u]+=size[v];
			if(size[v]>size[son[u]])
			{
				son[u]=v;
			}	
		}
	}
	return;
}
void dfs2(int u,int ttf)//testify
{
	top[u]=ttf;
	if(son[u])
	{
		dfs2(son[u],ttf);
	}
	for(int i=head[u];i;i=e[i].nxt)
	{
		int v=e[i].to;
		if(v!=fa[u]&&v!=son[u])
		{
			dfs2(v,v);
		}
	}
}
int LCA(int u,int v)
{
	while(top[u]!=top[v])
	{
		if(dep[top[u]]>dep[top[v]])
		{
			swap(u,v);
		}
		v=fa[top[v]];
	}
	if(dep[u]>dep[v])
	{
		swap(u,v);
	}
	return u;
}
struct segment_tree
{
	int ans;
}t[2000005];
void build(int i,int l,int r)
{
	if(l==r)
	{
		t[i].ans=l;
		return;
	}
	int mid=(l+r)>>1;
	build(i<<1,l,mid);
	build(i<<1|1,mid+1,r);
	t[i].ans=LCA(t[i<<1].ans,t[i<<1|1].ans);
	return;
}
int query(int i,int l,int r,const int &x,const int &y)
{
	if(x<=l&&r<=y)
	{
		return t[i].ans;
	}
	int mid=(l+r)>>1,ans=0;
	if(x<=mid)
	{
		ans=query(i<<1,l,mid,x,y);
	}
	if(mid<y)
	{
		if(ans==0)
		{
			ans=query(i<<1|1,mid+1,r,x,y);
		}
		else
		{
			ans=LCA(ans,query(i<<1|1,mid+1,r,x,y));
		}
	}
	return ans;
}
int q,l,r,k;
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	ios::sync_with_stdio(false);
	cin>>n;
	for(int i=1;i<n;i++)
	{
		cin>>u>>v;
		add(u,v); 
		add(v,u);
	}
	dfs1(1,0,1);
	dfs2(1,1);
	build(1,1,n);
	cin>>q;
	while(q--)
	{
		cin>>l>>r>>k;
		int ans=0;
		for(int i=l;i+k-1<=r;i++)
		{
			ans=max(ans,dep[query(1,1,n,i,i+k-1)]);
		}
		cout<<ans<<endl;
	}
	return 0;
}
/*
我不是管人痴 
也不是没出息
只是我患有后天学得先天
偷自 B 站《爱，死亡，皮套人》 
*/
