#include<bits/stdc++.h>
#define ll long long
#define mp(a,b) make_pair(a,b)
using namespace std;
const ll MAXN=5e5+5;
ll n,u,v,q,l,r,k,dep[MAXN],st[MAXN][20],ST[MAXN][20];
vector<ll> G[MAXN];
inline int read()
{
	int s=0;
	char c=getchar();
	while(c<'0'||c>'9') c=getchar();
	while(c>='0'&&c<='9')
	{
		s=s*10+(c-'0');
		c=getchar();
	}
	return s;
}
void build(ll d,ll fa,ll p)
{
	dep[d]=p;
	st[d][0]=fa;
	for(ll i=0;i<G[d].size();i++)
		if(G[d][i]!=fa)
			build(G[d][i],d,p+1);
	return;
}
ll lca(ll x,ll y)
{
	if(dep[x]>dep[y])
	{
		for(ll i=log2(n);i>=0;i--)
			if(st[x][i]&&dep[st[x][i]]>=dep[y]) x=st[x][i];
	}
	if(dep[x]<dep[y])
	{
		for(ll i=log2(n);i>=0;i--)
			if(st[y][i]&&dep[st[y][i]]>=dep[x]) y=st[y][i];
	}
	if(x==y) return x;
	for(ll i=log2(n);i>=0;i--)
		if(st[x][i]&&st[y][i]&&st[x][i]!=st[y][i])
			x=st[x][i],y=st[y][i];
	return st[x][0];
}
ll Search(ll L,ll R)
{
	ll t=log2(R-L+1);
	return lca(ST[L][t],ST[R-(1<<t)+1][t]);
}
class Subtask
{
	private:
		ll Min[MAXN][20];
	public:
		static bool check()
		{
			for(ll i=2;i<=n;i++)
				if(G[i].size()>2) return false;
			return G[1].size()==1;
		}
		ll Search(ll L,ll R)
		{
			ll t=log2(R-L+1);
			if(dep[Min[L][t]]<=dep[Min[R-(1<<t)+1][t]])
				return Min[L][t];
			else
				return Min[R-(1<<t)+1][t];
		}
		ll Div(ll L,ll R)
		{
			ll t=Search(L,R),s=dep[t];
			if(t-L>=k) s=max(s,Div(L,t-1));
			if(R-t>=k) s=max(s,Div(R,t+1));
			return s;
		}
		void work()
		{
			for(ll i=1;i<=n;i++) Min[i][0]=i;
			for(ll i=1;i<=log2(n);i++)
				for(ll j=1;j+(1<<i)-1<=n;j++)
					if(dep[Min[j][i-1]]<=dep[Min[j+(1<<(i-1))][i-1]])
						Min[j][i]=Min[j][i-1];
					else
						Min[j][i]=Min[j+(1<<(i-1))][i-1];
			q=read();
			for(ll i=1;i<=q;i++)
			{
				l=read(),r=read(),k=read();
				printf("%lld\n",Div(l,r));
			}
		}
}subtask;
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	n=read();
	for(ll i=1;i<n;i++)
	{
		u=read(),v=read();
		G[u].push_back(v);
		G[v].push_back(u);
	}
	build(1,0,1);
	if(subtask.check())
	{
		subtask.work();
		return 0;
	}
	for(ll i=1;i<=log2(n);i++)
		for(ll j=1;j<=n;j++)
			st[j][i]=st[st[j][i-1]][i-1];
	for(ll i=1;i<=n;i++) ST[i][0]=i;
	for(ll i=1;i<=log2(n);i++)
		for(ll j=1;j+(1<<i)-1<=n;j++)
			ST[j][i]=lca(ST[j][i-1],ST[j+(1<<(i-1))][i-1]);
	q=read();
	for(ll i=1;i<=q;i++)
	{
		l=read(),r=read(),k=read();
		ll ans=1;
		for(ll j=l;j+k-1<=r;j++)
			ans=max(ans,dep[Search(j,j+k-1)]);
		printf("%lld\n",ans);
	}
	return 0;
}
