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

/*
看起来暴力挺好写的 

因为区间长度变长，lca 一定不会深度变大，所以只考虑长度为 k 的区间就好 

注意 dep[1] = 1 

反正不会写，打完暴力就撤  
起码暴力写出来了 O(nqlogn) 有 20pts 吧 

luogu uid:831702
退役啦！ 
*/
const int maxn=5e5+10;
int n,q;
struct node{
	int u,v,next;
}edge[maxn<<1];
int head[maxn],cnt;
int siz[maxn],dep[maxn],son[maxn],top[maxn],fa[maxn];

void add(int u,int v)
{
	edge[++cnt]=(node){u,v,head[u]};
	head[u]=cnt;
}

void dfs1(int u,int f)
{
	fa[u]=f;
	siz[u]=1;
	dep[u]=dep[f]+1;
	for(int i=head[u];i;i=edge[i].next)
	{
		int v=edge[i].v;
		if(v==fa[u]) continue;
		dfs1(v,u);
		siz[u]+=siz[v];
		if(siz[v]>siz[son[u]]) son[u]=v;
	}
}

void dfs2(int u,int Top)
{
	top[u]=Top;
	if(son[u])
	{
		dfs2(son[u],Top);
		for(int i=head[u];i;i=edge[i].next)
		{
			int v=edge[i].v;
			if(v==fa[u]||v==son[u]) continue;
			dfs2(v,v);
		}
	}
}

int LCA(int x,int y)
{
	while(top[x]!=top[y])
	{
		if(dep[top[x]]<dep[top[y]])
			swap(x,y);
		x=fa[top[x]];
	}
	if(dep[x]<dep[y]) return x;
	return y;
}

int query(int l,int r)
{
	int lca=l;
	for(int i=l+1;i<=r;i++)
		lca=LCA(lca,i);
	return dep[lca];
}

int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	for(int u,v,i=1;i<n;i++)
	{
		scanf("%d%d",&u,&v);
		add(u,v);
		add(v,u);
	}
	dfs1(1,0);
	dfs2(1,0);
	scanf("%d",&q);
	while(q--)
	{
		int l,r,k,ans=0;
		scanf("%d%d%d",&l,&r,&k);
		for(int i=l;i+k-1<=r;i++)
		{
			int j=i+k-1;
			ans=max(ans,query(i,j));
		}
		cout<<ans<<'\n';
	}
	return 0;
}
