#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10;
int n,q;
int f[25][N],de[N],ans[25][N];
vector<int>v[N];
int read()
{
	int x=0;char c=getchar();
	for(;!isdigit(c);c=getchar());
	for(;isdigit(c);c=getchar())x=(x<<3)+(x<<1)+(c^48);
	return x;
}
void dfs(int x,int fa)
{
	de[x]=de[fa]+1;
	f[0][x]=fa;
	for(int i:v[x])
	{
		if(i==fa)continue;
		dfs(i,x);
	}
}
int lca(int x,int y)
{
	if(de[x]<de[y])swap(x,y);
	for(int i=19;i>=0;i--)
		if(de[f[i][x]]>=de[y])
			x=f[i][x];
	if(x==y)return x;
	for(int i=19;i>=0;i--)
		if(f[i][x]!=f[i][y])
			x=f[i][x],y=f[i][y];
	return f[0][x];
}
int ask(int l,int r)
{
	int k=log2(r-l+1);
	return lca(ans[k][l],ans[k][r-(1<<k)+1]);
}
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	n=read();
	for(int i=1;i<n;i++)
	{
		int x=read(),y=read();
		v[x].push_back(y);
		v[y].push_back(x);
	}
	dfs(1,0);
	for(int j=1;j<=19;j++)
		for(int i=1;i<=n;i++)
			f[j][i]=f[j-1][f[j-1][i]];
	for(int i=1;i<=n;i++)
		ans[0][i]=i;
	for(int j=1;j<=19;j++)
		for(int i=1;i+(1<<j-1)<=n;i++)
			ans[j][i]=lca(ans[j-1][i],ans[j-1][i+(1<<j-1)]);
	q=read();
	while(q--)
	{
		int l=read(),r=read(),k=read(),ans=0;
		for(int i=l;i+k-1<=r;i++)
			ans=max(ans,de[ask(i,i+k-1)]);
		printf("%d\n",ans);
	}
	return 0;
}

