#include<bits/stdc++.h>
using namespace std;
const int N=5e5+50;
int n,q,fa[N][21],dep[N],lg[N],zx[N][21],two[21];
vector<int> e[N];
void dfs1(int wz,int last)
{
	fa[wz][0]=last;
	dep[wz]=dep[last]+1;
	for(int i=1;i<=lg[dep[wz]];i++) fa[wz][i]=fa[fa[wz][i-1]][i-1];
	for(int to:e[wz]) if(to!=last) dfs1(to,wz);
}
int LCA(int x,int y)
{
	if(dep[x]<dep[y]) swap(x,y);
	while(dep[x]>dep[y]) x=fa[x][lg[dep[x]-dep[y]]];
	if(x==y) return x;
	for(int i=lg[dep[x]];i>=0;i--) if(fa[x][i]!=fa[y][i])
		x=fa[x][i],y=fa[y][i];
	return fa[x][0];
}
int tzy;
int query(int l,int r)
{
	tzy=lg[r-l+1];
	return dep[LCA(zx[l][tzy],zx[r-two[tzy]+1][tzy])];
}
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	for(int i=1,u,v;i<n;i++)
	{
		scanf("%d %d",&u,&v);
		e[u].push_back(v);
		e[v].push_back(u);
	}
	lg[1]=0; for(int i=2;i<=n;i++) lg[i]=lg[i>>1]+1;
	two[0]=1; for(int i=1;i<=lg[n];i++) two[i]=two[i-1]*2;
	dfs1(1,0);
	for(int i=1;i<=n;i++) zx[i][0]=i;
	for(int j=1;j<=lg[n];j++)
		for(int i=1;i+two[j]-1<=n;i++)
			zx[i][j]=LCA(zx[i][j-1],zx[i+two[j-1]][j-1]);
	scanf("%d",&q);
	int le,ri,k,ans;
	while(q--)
	{
		ans=0;
		scanf("%d %d %d",&le,&ri,&k);
		for(int i=le;i+k-1<=ri;i++) ans=max(ans,query(i,i+k-1));
		printf("%d\n",ans);
	}
	return 0;
}
