#include<bits/stdc++.h>
#define LL long long
#define db double
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;

/*
设f(i,j)表示[i,j]的LCA的深度，则f(i,j)>=f(i,j+1)。因此只需求 max{f(i,i+k-1)}。复杂度O(n^2+qn)
性质A（链）：
性质B：直接st维护区间LCA即可 
有64pts了 
*/ 

const int N=5e5+10;

int n,Q,deg[N],cnt[N],lg[N];
int dfn[N],dep[N];
int lca[N][22];
vector <int> g[N];

int get(int x,int y){return dfn[x]<dfn[y]? x:y;}
struct ST
{
	int f[N][22];
	
	void prework()
	{
		for(int j=1; j<=lg[n]; j++)
			for(int i=1; i+(1<<j)-1<=n; i++)
				f[i][j]=get(f[i][j-1],f[i+(1<<(j-1))][j-1]);
	}
}st;

int LCA(int x,int y)
{
	if(x==y) return x;
	x=dfn[x]; y=dfn[y];
	if(x>y) swap(x,y);
	int k=lg[y-x]; x++;
	return get(st.f[x][k],st.f[y-(1<<k)+1][k]); 
}

int getlca(int l,int r)
{
	int k=lg[r-l+1];
	return LCA(lca[l][k],lca[r-(1<<k)+1][k]);
}

void dfs(int x,int fa)
{
	st.f[dfn[x]=++dfn[0]][0]=fa;
	dep[x]=dep[fa]+1;
	for(int y:g[x])
		if(y!=fa) dfs(y,x); 
}

namespace Sub1
{
	void solve()
	{
		while(Q--)
		{
			int l,r,k; scanf("%d%d%d",&l,&r,&k);
			int ans=0;
			for(int i=l; i+k-1<=r; i++)
				ans=max(ans,dep[getlca(i,i+k-1)]);
			printf("%d\n",ans); 
		}
	}
}

//namespace Sub2
//{
//	int mx[N][22];
//	int L[N],R[N],sta[N],top;
//	struct Ask
//	{
//		int l,r,k,id;
//	}; vector <Ask> q[N];
//	int ans[N];
//	vector <int> buc[N];
//	
//	#define lc(p) p<<1
//	#define rc(p) p<<1|1
//	struct SegmentTree
//	{
//		
//	}T;
//	
//	void solve()
//	{
//		sta[top=1]=0;
//		for(int i=1; i<=n; i++)
//		{
//			while(top && dep[i]<dep[sta[top]]) top--;
//			L[i]=sta[top];
//			sta[++top]=i;
//		}
//		sta[top=1]=n+1;
//		for(int i=n; i>=1; i--)
//		{
//			while(top && dep[i]<dep[sta[top]]) top--;
//			R[i]=sta[top];
//			sta[++top]=i;
//		}
//		for(int i=1; i<=n; i++)
//			buc[R[i]-L[i]-1].push_back(dep[i]); 
//				
//		for(int i=1; i<=Q; i++)
//		{
//			int l,r,k; scanf("%d%d%d",&l,&r,&k);
//			q[k].push_back({l,r,k,id});			
//		}
//		
//		
//	}
//}

int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);

	scanf("%d",&n);
	for(int i=1; i<n; i++)
	{
		int x,y; scanf("%d%d",&x,&y);
		g[x].push_back(y);
		g[y].push_back(x);
		deg[x]++; deg[y]++;
	}
	
	lg[1]=0;
	for(int i=2; i<=n; i++)
		lg[i]=lg[i>>1]+1; 
	
	dfs(1,0);
	st.prework();
	
	for(int i=1; i<=n; i++)
		lca[i][0]=i;
	for(int j=1; j<=lg[n]; j++)
		for(int i=1; i+(1<<j)-1<=n; i++)
			lca[i][j]=LCA(lca[i][j-1],lca[i+(1<<(j-1))][j-1]);
	
	bool pdA=0;
	for(int i=1; i<=n; i++) cnt[deg[i]]++;
	if(cnt[1]==2 && cnt[2]==n-2) pdA=1;
	
	scanf("%d",&Q);
	
	/*if(pdA) Sub2::solve();
	else*/ Sub1::solve();

	return 0;
}

