#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=5e5+5;
const int mod=1e9+7;
int n,q,u,v,d[maxn],f[maxn][21],D[maxn][21],l,r,k,s;
vector<int>g[maxn];
inline void dfs(int x,int fa) {
	d[x]=d[fa]+1;
	f[x][0]=fa;
	for(int j=1;j<=19;j++) {
		f[x][j]=f[f[x][j-1]][j-1];
	}
	for(int i=0;i<(int)g[x].size();i++) {
		int u=g[x][i];
		if(u==fa)continue ;
		dfs(u,x);
	}
	return ;
}
inline int lca(int u,int v) {
	if(u==v)return u;
	if(d[u]>d[v])swap(u,v);
	if(u==1)return u;
	for(int i=19;i>=0;i--) {
		if(d[f[v][i]]>=d[u]) {
			v=f[v][i];
		}
	}
	if(u==v)return u;
	for(int i=19;i>=0;i--) {
		if(f[u][i]!=f[v][i]) {
			u=f[u][i],v=f[v][i];
		}
	}
	return f[u][0];
}
inline int drg(int l,int r) {
	int k=log2(r-l+1);
	return lca(D[l][k],D[r-(1<<k)+1][k]);
}
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;i<n;i++) {
		cin>>u>>v;
		g[u].push_back(v);
		g[v].push_back(u);
	}
	dfs(1,0);
	for(int i=1;i<=n;i++) {
		D[i][0]=i;
	}
	for(int j=1;j<=19;j++) {
		for(int i=1;i+(1<<j)-1<=n;i++) {
			D[i][j]=lca(D[i][j-1],D[i+(1<<j-1)][j-1]);
		}
	}
	cin>>q;
	while(q--) {
		cin>>l>>r>>k;s=0;
		for(int i=l;i+k-1<=r;i++) {
			s=max(s,d[drg(i,i+k-1)]);
		}
		cout<<s<<"\n";
	}
	return 0;
}
