#include<bits/stdc++.h>
#define ll long long
#define pb emplace_back
#define N 500005
using namespace std;
int n,m;
int dep[N];
vector<int>E[N];
struct LCA{
	int st[N][21],dfn[N],ids;
	void dfs(int u,int fa)
	{
		dfn[u]=++ids;
		st[dfn[u]][0]=fa;dep[u]=dep[fa]+1;
		for(int v:E[u]) if(v^fa) dfs(v,u);
	}
	inline int get(int u,int v){return dfn[u]<dfn[v]?u:v;}
	void prest()
	{
		for(int i=n;i>=1;i--)
			for(int j=1;j<=__lg(n-i+1);j++)
				st[i][j]=get(st[i][j-1],st[i+(1<<j-1)][j-1]);
	}
	int ask(int u,int v)
	{
		if(u==v) return u;
		u=dfn[u],v=dfn[v];
		if(u>v) swap(u,v);
		++u;int L=__lg(v-u+1);
		return get(st[u][L],st[v-(1<<L)+1][L]);
	}
}T;
struct ques{
	int l,r,k,id;
}q[N];
int f[N][21];
inline int ask(int l,int r)
{
	int L=__lg(r-l+1);
	return T.ask(f[l][L],f[r-(1<<L)+1][L]);
}
int mx;
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<n;i++)
	{
		int u,v;
		scanf("%d%d",&u,&v);
		E[u].pb(v),E[v].pb(u);
	}
	T.dfs(1,0);
	T.prest();
	for(int i=1;i<=n;i++) f[i][0]=i;
	for(int i=n;i>=1;i--)
		for(int j=1;j<=__lg(n-i+1);j++) f[i][j]=T.ask(f[i][j-1],f[i+(1<<j-1)][j-1]);  
	bool flag=0;
	for(int i=1;i<=n;i++) if(dep[i]==n) flag=1;
	scanf("%d",&m);
	for(int i=1;i<=m;i++)
	{
		int l,r,k;
		scanf("%d%d%d",&l,&r,&k);
		int res=0;
		for(int j=l;j<=r-k+1;j++)
			res=max(res,dep[ask(j,j+k-1)]);
		printf("%d\n",res);
	}
	return 0;
}
