#include<bits/stdc++.h>
using namespace std;
const int MAXN=5e5+5;
int n,q;
int head[MAXN],tot;
struct node{
	int nxt,to;
}e[MAXN<<1];
inline void add(int u,int v){
	e[++tot]=node{head[u],v};
	head[u]=tot;
}
int dep[MAXN],fa[MAXN];
void dfs(int u,int fa1){
	fa[u]=fa1;dep[u]=dep[fa1]+1;
	for(int i=head[u];i;i=e[i].nxt){
		int v=e[i].to;if(v==fa1)continue;
		dfs(v,u);
	}
}
struct ST1{
	int fir[MAXN],rid[MAXN<<1],idx;
	void dfs(int u,int fa1){
		fir[u]=++idx;rid[idx]=u;
		for(int i=head[u];i;i=e[i].nxt){
			int v=e[i].to;if(v==fa1)continue;
			dfs(v,u);
			rid[++idx]=u;
		}
	}
	int lg[MAXN<<1],st[22][MAXN<<1];
	inline int cmp(int x,int y){
		if(dep[x]<dep[y])return x;
		return y;
	}
	inline void init(){
		dfs(1,0);
		for(int i=2;i<=idx;i++)lg[i]=lg[i>>1]+1;
		for(int i=1;i<=idx;i++)st[0][i]=rid[i];
		for(int i=1;i<=21;i++)for(int j=1;j+(1<<i)-1<=idx;j++){
			st[i][j]=cmp(st[i-1][j],st[i-1][j+(1<<(i-1))]);
		}
	}
	inline int __lca(int x,int y){
		x=fir[x],y=fir[y];
		if(x>y)swap(x,y);
		int k=lg[y-x+1];
		return cmp(st[k][x],st[k][y-(1<<k)+1]);
	}
}T1;
struct ST2{
	int lg[MAXN],st[21][MAXN];
	inline int cmp(int x,int y){
		return T1.__lca(x,y);
	}
	inline void init(){
		for(int i=2;i<=n;i++)lg[i]=lg[i>>1]+1;
		for(int i=1;i<=n;i++)st[0][i]=i;
		for(int i=1;i<=20;i++)for(int j=1;j+(1<<i)-1<=n;j++){
			st[i][j]=cmp(st[i-1][j],st[i-1][j+(1<<(i-1))]);
		}
	}
	inline int qry(int x,int y){
		int k=lg[y-x+1];
		return cmp(st[k][x],st[k][y-(1<<k)+1]);
	}
}T2;
int deg[MAXN];
#define Fopen(file) freopen(file".in","r",stdin),freopen(file".out","w",stdout)
signed main(){
	Fopen("query");
	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(false);
	cin>>n;
	for(int i=1,u,v;i<n;i++){
		cin>>u>>v;
		add(u,v),add(v,u);
		deg[u]++,deg[v]++;
	}
	bool flag=(deg[1]<=1);
	for(int i=1;i<=n;i++)flag&=(deg[i]<=2);
	if(flag){
		dfs(1,0);
		T1.init();
		T2.init();
		cin>>q;
		while(q--){
			int L,R,k;cin>>L>>R>>k;
			int ans=dep[T2.qry(L,R)];
			cout<<ans<<"\n";
		}
		return 0;
	}
	dfs(1,0);
	T1.init();
	T2.init();
	cin>>q;
	while(q--){
		int L,R,k;cin>>L>>R>>k;
		int ans=0;
		for(int l=L,r=L+k-1;r<=R;l++,r++){
			ans=max(ans,dep[T2.qry(l,r)]);
		}
		cout<<ans<<"\n";
	}
}
