#include<bits/stdc++.h>
using namespace std;

const int N=5e5+5;
int n,dep[N],st[N][22],fa[N][22],l,r,k,q;
bool vis[N];
vector<int>E[N];
void dfs(int now,int f){
	dep[now]=dep[f]+1;
	fa[now][0]=f;
	for(int i=1;i<=19;++i) fa[now][i]=fa[fa[now][i-1]][i-1];
	for(int i=0;i<E[now].size();++i){
		if(E[now][i]!=f) dfs(E[now][i],now);
	}
}
int lca(int a,int b){
	if(dep[a]<dep[b]) swap(a,b);
	for(int i=19;~i;--i)
		if(dep[fa[a][i]]>=dep[b]) a=fa[a][i];
	if(a==b) return a;
	for(int i=19;~i;--i){
		if(fa[a][i]!=fa[b][i]) a=fa[a][i],b=fa[b][i];
	}return fa[a][0];
}
int query(int l,int r){
	int k=log2(r-l+1);
	return lca(st[l][k],st[r-(1<<k)+1][k]);
}
void work(int l,int r,int k){
	int res=-1;
	if(r-l-k+1<=5000){
		for(int i=l+k-1;i<=r;++i) res=max(res,dep[query(i-k+1,i)]);
		cout<<res<<"\n";		
	}
	else{
		int cnt=2200;
		for(int i=r;cnt;--cnt,--i) res=max(res,dep[query(i-k+1,i)]); 
		cnt=2200;
		for(int i=l;cnt;--cnt,++i) res=max(res,dep[query(i,i+k-1)]);
		cout<<res<<"\n";
	}
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n;
	st[n][0]=n;
	for(int i=1;i<n;++i){
		st[i][0]=i;
		cin>>l>>r;
		E[l].emplace_back(r);
		E[r].emplace_back(l);
	}
	dfs(1,0);
	for(int i=1;i<=19;++i){
		for(int j=1;j+(1<<i-1)<=n;++j){
			st[j][i]=lca(st[j][i-1],st[j+(1<<i-1)][i-1]);
		}
	}
	cin>>q;
	while(q--){
		cin>>l>>r>>k;
		work(l,r,k);
	}
	return 0;
} 
