#include<bits/stdc++.h>

#define N 1000001
#define pb push_back

using namespace std;

namespace IO {
	int read() {
		int x=0,f=1;
		char ch=0;
		while(!isdigit(ch)) {
			ch=getchar();
			if(ch=='-') {
				f=-f;
			}
		}
		while(isdigit(ch)) {
			x=x*10+(ch^48);
			ch=getchar();
		}
		return x*f;
	}
}using namespace IO;

int n;
vector<int> e[N];
int q;
int st[N][21];

int son[N],siz[N],dep[N],fa[N],top[N],dfn[N],tim=0;
void dfs1(int u,int f,int d) {
	fa[u]=f;
	dep[u]=d;
	siz[u]=1;
	for(int v:e[u]) {
		if(v==f) {
			continue;
		}
		dfs1(v,u,d+1);
		siz[u]+=siz[v];
		if(siz[v]>siz[son[u]]) {
			son[u]=v;
		}
	}
}
void dfs2(int u,int t) {
	top[u]=t;
	dfn[u]=++tim;
	if(!son[u]) {
		return ;
	}
	dfs2(son[u],t);
	for(int v:e[u]) {
		if(v==fa[u]||v==son[u]) {
			continue;
		}
		dfs2(v,v);
	}
}
int lca(int x,int y) {
	while(top[x]!=top[y]) {
		if(dep[top[x]]<dep[top[y]]) {
			swap(x,y);
		}
		x=fa[top[x]];
	}
	if(dep[x]>dep[y]) {
		swap(x,y);
	}
	return x;
}
int query(int l,int r) {
	int k=log2(r-l+1);
	return lca(st[l][k],st[r-(1<<k)+1][k]);
}

int main() {
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
		
	cin>>n;
	for(int i=1;i<=n-1;i++) {
		int u,v;
		cin>>u>>v;
		e[u].pb(v);
		e[v].pb(u);
	}
	dfs1(1,-1,1);
	dfs2(1,1);
	for(int i=1;i<=n;i++) {
		st[i][0]=i;
	}
	for(int j=1;(1<<j)<=n;j++) {
		for(int i=1;i+(1<<j)-1<=n;i++) {
			st[i][j]=lca(st[i][j-1],st[i+(1<<(j-1))][j-1]);
		}
	}

	cin>>q;
	while(q--) {
		int l,r,k;
		cin>>l>>r>>k;
		int ans=-1;
		for(int i=l;i+k-1<=r;i++) {
			ans=max(ans,dep[query(i,i+k-1)]);
		}
		cout<<ans<<endl;
	}

	return 0;
}