#include<bits/stdc++.h>
#define rg register int
#define ll long long
using namespace std;
inline int rd()
{
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){s=(s<<1)+(s<<3)+(ch^48);ch=getchar();}
	return s*w;
}
inline void wt(int x)
{
	if(x<0) putchar('-'),x=-x;
	if(x>=10) wt(x/10);
	putchar('0'+x%10);
}
const int N=500011;
int n,T;
int sum,h[N];
struct node
{
	int to,nxt;
}a[N<<1];
inline void add(int x,int y)
{
	sum++;
	a[sum].to=y;
	a[sum].nxt=h[x];
	h[x]=sum;
}
int f[N][20],dep[N];
inline void aa(int x)
{
	for(rg i=h[x];i;i=a[i].nxt)
	{
		int y=a[i].to;
		if(y!=f[x][0])
		{
			f[y][0]=x;
			dep[y]=dep[x]+1;
			aa(y);
		}
	}
}
inline int lca(int x,int y)
{
	if(dep[x]>dep[y])
	{
		int c=dep[x]-dep[y],o=0;
		while(c)
		{
			if(c&1) x=f[x][o];
			o++;
			c>>=1;
		}
	}
	else
	if(dep[x]<dep[y])
	{
		int c=dep[y]-dep[x],o=0;
		while(c)
		{
			if(c&1) y=f[y][o];
			o++;
			c>>=1;
		}
	}
	if(x==y) return x;
	for(rg i=19;i>=0;i--)
	if(f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i];
	return f[x][0];
}
int s[N][20],low[N];
inline int ask(int l,int k)
{
	return min(s[l][low[k]],s[l+k-(1<<low[k])][low[k]]);
}
int s2[N][20];
inline int ask2(int l,int k)
{
	return max(s2[l][low[k]],s2[l+k-(1<<low[k])][low[k]]);
}
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	n=rd();
	for(rg i=1;i<n;i++)
	{
		int x=rd(),y=rd();
		add(x,y);
		add(y,x);
	}
	dep[1]=1;
	aa(1);
	for(rg j=1;j<=19;j++)
	for(rg i=1;i<=n;i++) f[i][j]=f[f[i][j-1]][j-1];
	for(rg i=1;i<n;i++) s[i][0]=dep[lca(i,i+1)];
	for(rg i=1;i<=n;i++) s2[i][0]=dep[i];
	for(rg j=1;j<=19;j++)
		for(rg i=1;i<n;i++)
			if(i+(1<<j)-1<n) s[i][j]=min(s[i][j-1],s[i+(1<<(j-1))][j-1]);
	for(rg j=1;j<=19;j++)
		for(rg i=1;i<=n;i++)
			if(i+(1<<j)-1<=n) s2[i][j]=max(s2[i][j-1],s2[i+(1<<(j-1))][j-1]);
	for(rg i=1;i<=n;i++)
	{
		low[i]=low[i-1];
		if(i>=(1<<(low[i]+1))) low[i]++;
	}
	T=rd();
	while(T--)
	{
		int l=rd(),r=rd(),k=rd();
		int ans=0;
		if(k==1)
		{
			ans=ask2(l,r-l+1);
		}
		else
		{
			for(rg i=l;i<=r-k+1;i++) ans=max(ans,ask(i,k-1));
		}
		wt(ans);putchar('\n');
	}
	return 0;
}

