#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
inline int read(){
	int x=0,f=1;char c=getchar();
	while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}
	while(isdigit(c)) x=x*10+c-48,c=getchar();
	return x*f;
}
const int N=5e5+3;
vector<int> g[N];
int n,m,lg[N],siz[N],dep[N],dfn[N],dcnt,stf[20][N],st[20][N];
void dfs1(int x,int f){
	siz[x]=1,dep[x]=dep[f]+1,dfn[x]=++dcnt;
	stf[0][dcnt]=f;
	for(int v:g[x]) if(v^f) dfs1(v,x);
}
inline int get(int x,int y){return dfn[x]<dfn[y]?x:y;}
inline int lca(int x,int y){
	if(x==y) return x;
	if((x=dfn[x])>(y=dfn[y])) swap(x,y);x++;
	int p=lg[y-x+1];
	return get(stf[p][x],stf[p][y-(1<<p)+1]);
}
inline int got(int x,int y){
	int p=lg[y-x+1];
	return lca(st[p][x],st[p][y-(1<<p)+1]);
}
void init(){
	lg[0]=-1;for(int i=1;i<=n;i++) lg[i]=lg[i>>1]+1;
	for(int j=1;j<=19;j++)
		for(int i=1;i+(1<<j)-1<=n;i++)
			stf[j][i]=get(stf[j-1][i],stf[j-1][i+(1<<j-1)]);
	for(int i=1;i<=n;i++) st[0][i]=i;
	for(int j=1;j<=19;j++)
		for(int i=1;i+(1<<j)-1<=n;i++)
			st[j][i]=lca(st[j-1][i],st[j-1][i+(1<<j-1)]);
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	n=read();
	for(int i=1,u,v;i<n;i++){
		u=read(),v=read();
		g[u].push_back(v);
		g[v].push_back(u);
	}
	dfs1(1,0);init();
	m=read();int l,r,k;
	for(int i=1;i<=m;i++){
		l=read(),r=read(),k=read();int ans=0;
		for(int L=l,R=l+k-1;R<=r;L++,R++) ans=max(ans,dep[got(L,R)]);
		printf("%d\n",ans);
	}
	return 0;
}

