#include<bits/stdc++.h>
using namespace std;
#define MAXN 500005
int n,q;
vector<int>e[MAXN];
int fa[20][MAXN];
int dep[MAXN];
int mx[20][MAXN];
int lg2[MAXN];
void dfs(int u,int f){
	mx[0][u]=dep[u];
	for(auto v:e[u])if(v!=f){
		dep[v]=dep[u]+1;
		fa[0][v]=u;
		dfs(v,u);
	}
}
inline int qmx(int l,int r){
	int t=lg2[r-l+1];
	return max(mx[t][l],mx[t][r-(1<<t)+1]);
}
inline int lca(int x,int y){
	if(dep[x]<dep[y])swap(x,y);
	for(int j=19;j>=0;--j){
		if(dep[fa[j][x]]>=dep[y])x=fa[j][x];
	}
	if(x==y)return x;
	for(int j=19;j>=0;--j){
		if(fa[j][x]!=fa[j][y])x=fa[j][x],y=fa[j][y];
	}
	return fa[0][x];
}
int ans[MAXN];
struct rg{
	int l,r,k,v,id,tid;
}qq[MAXN*2];
inline bool inrg(int l,int r,int x){
	return l<=x&&x<=r;
}
int tr[MAXN];
void ins(int x,int v){
	for(;x<=n;x+=x&-x)tr[x]=max(tr[x],v);
}
void clr(int x){
	for(;x<=n;x+=x&-x)tr[x]=0;
}
int get(int x){
	int r=0;
	for(;x;x^=x&-x)r=max(r,tr[x]);
	return r;
}
void cdq3(int l,int r){
	if(l==r)return;
	int mid=(l+r)>>1;
	cdq3(l,mid),cdq3(mid+1,r);
	sort(qq+l,qq+r+1,[](const rg&a,const rg&b){
		if(a.r==b.r){
			if(a.id>0&&b.id==-1)return false;
			if(a.id==-1&&b.id>0)return true;
			return false;
		}
		return a.r>b.r;
	});
//	cerr<<l<<' '<<r<<'\n';
//	for(int i=l;i<=r;++i){
//		cerr<<qq[i].l<<' '<<qq[i].r<<' '<<qq[i].k<<' '<<qq[i].v<<' '<<qq[i].id<<' '<<qq[i].tid<<'\n';
//	}
	for(int i=l;i<=r;++i){
		if(inrg(l,mid,qq[i].tid)&&qq[i].id==-1){
			ins(qq[i].l,qq[i].v);
		}
		else if(inrg(mid+1,r,qq[i].tid)&&qq[i].id>0){
			ans[qq[i].id]=max(ans[qq[i].id],get(qq[i].l));
//			cerr<<'!'<<qq[i].id<<' '<<ans[qq[i].id]<<'\n';
		}
	}
	for(int i=l;i<=r;++i){
		if(inrg(l,mid,qq[i].tid)&&qq[i].id==-1){
			clr(qq[i].l);
		}
	}
}
int tot=0;
pair<int,int> v[MAXN];
namespace aaa{
	int fa[MAXN],rr[MAXN];
	inline int find(int x){
		return (x==fa[x])?x:fa[x]=find(fa[x]);
	}
	void work(){
		for(int i=1;i<=n;++i)fa[i]=i,rr[i]=i;
		for(int i=1;i<n;++i){
			int t=v[i].first,id=v[i].second;
			int t1=find(id),t2=find(id+1);
			fa[t2]=t1;
			rr[t1]=rr[t2];
			qq[++tot]=rg{t1,rr[t1],rr[t1]-t1+1,t,-1,0};
		}
	}
}
signed main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n;
	for(int i=1,u,v;i<n;++i){
		cin>>u>>v;
		e[u].emplace_back(v);
		e[v].emplace_back(u);
	}
	dep[1]=1;
	dfs(1,0);
	for(int j=1;j<20;++j){
		for(int i=1;i<=n;++i){
			fa[j][i]=fa[j-1][fa[j-1][i]];
		}
	}
	for(int j=1;j<20;++j){
		for(int i=1;i+(1<<j)-1<=n;++i){
			mx[j][i]=max(mx[j-1][i],mx[j-1][i+(1<<(j-1))]);
		}
	}
	for(int i=2;i<=n;++i)lg2[i]=lg2[i>>1]+1;
	cin>>q;
	for(int i=1;i<=q;++i){
		int l,r,k;
		cin>>l>>r>>k;
		if(k==1){
			ans[i]=qmx(l,r);
		}
		else{
//			--k,--r;
			qq[++tot]=rg{r-k+1,l+k-1,k,0,i,0};
		}
	}
	for(int i=1;i<n;++i){
		v[i]=make_pair(dep[lca(i,i+1)],i);
//		cerr<<i<<' '<<v[i].first<<'\n';
	}
	sort(v+1,v+n,greater<pair<int,int> >());
	aaa::work();
//	for(int i=1;i<=tot;++i){
//		cerr<<qq[i].l<<' '<<qq[i].r<<' '<<qq[i].k<<' '<<qq[i].v<<' '<<qq[i].id<<'\n';
//	}
	sort(qq+1,qq+tot+1,[](const rg&a,const rg&b){
		if(a.k==b.k){
			if(a.r!=b.r)return a.r>b.r;
			if(a.id>0&&b.id==-1)return false;
			if(a.id==-1&&b.id>0)return true;
			return false; 
		}
		return a.k>b.k;
	});
	for(int i=1;i<=tot;++i)qq[i].tid=i;
	cdq3(1,tot);
	for(int i=1;i<=q;++i){
		cout<<ans[i]<<'\n';
	}
}
/*
10
1 2
1 3
3 4
3 5
3 6
4 9
5 7
5 8
6 10
1
3 8 2
*/
