#include<bits/stdc++.h>
#define _ 500005
using namespace std;
inline int read(){
	int x=0,f=1;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();
	return x*f;
}
int n,q,cnt,vis[_],son[_],dep[_],fa[_],dfn[_],rnk[_],siz[_],top[_];
vector<int>e[_];
void dfs(int u,int f){
	dep[u]=dep[f]+1,siz[u]=1;
	dfn[u]=++cnt,rnk[cnt]=u;
	fa[u]=f;
	for(int i=0;i<e[u].size();i++){
		int v=e[u][i];
		if(v^fa[u]){
			dfs(v,u),siz[u]+=siz[v];
			if(son[u]==-1)son[u]=v;
			else if(siz[v]>siz[son[u]])son[u]=v;
		}
	}
}
void dfs2(int u,int tp){
	top[u]=tp;
	if(son[u]!=-1){
		dfs2(son[u],tp);
		for(int i=0;i<e[u].size();i++){
			int v=e[u][i];
			if(v!=fa[u]&&v!=son[u])dfs2(v,v);
		}	
	}
}
int lca(int x,int y){
	int fx=top[x],fy=top[y];
	while(fx^fy){
		if(dep[fx]<dep[fy])swap(fx,fy),swap(x,y);
		x=fa[fx],fx=top[x];
	}
	return min(dep[x],dep[y]);
}
struct SMT{
	int t[_<<2],u[_<<2];
	void pushup(int num){t[num]=max(t[num<<1],t[num<<1|1]),u[num]=min(u[num<<1],u[num<<1|1]);}
	void build(int l,int r,int num){
		if(l==r){t[num]=u[num]=dfn[l];return;}
		u[num]=INT_MAX;
		int mid=l+r>>1;
		build(l,mid,num<<1),build(mid+1,r,num<<1|1);
		pushup(num);
	}
	int query_max(int l,int r,int num,int x,int y){
		if(x>r||y<l)return 0;
		if(x<=l&&r<=y)return t[num];
		int mid=l+r>>1;
		return max(query_max(l,mid,num<<1,x,y),query_max(mid+1,r,num<<1|1,x,y));
	}
	int query_min(int l,int r,int num,int x,int y){
		if(x>r||y<l)return INT_MAX;
		if(x<=l&&r<=y)return u[num];
		int mid=l+r>>1;
		return min(query_min(l,mid,num<<1,x,y),query_min(mid+1,r,num<<1|1,x,y));
	}
}t;
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	n=read();for(int i=1;i<=n;i++)son[i]=-1;
	for(int i=1;i<n;i++){
		int u=read(),v=read();
		e[u].push_back(v),e[v].push_back(u);
	}
	dfs(1,0);dfs2(1,1);
	t.build(1,n,1);
	q=read();
//	for(int i=1;i<=n;i++)printf("dfn:%lld\n",dfn[i]);
	while(q--){
		int l=read(),r=read(),k=read(),ans=0;
		for(int i=l;i+k-1<=r;i++){
//			printf("%lld %lld\n",rnk[t.query_min(1,n,1,i,i+k-1)],rnk[t.query_max(1,n,1,i,i+k-1)]);
			ans=max(ans,lca(rnk[t.query_min(1,n,1,i,i+k-1)],rnk[t.query_max(1,n,1,i,i+k-1)]));
		}
		printf("%d\n",ans);
	}
	return 0;
}
/*
11
1 2
1 3
2 4
2 5
2 6
3 7
3 8
4 9
4 10
8 11
*/
/*
6
5 6
6 1
6 2
2 3
2 4
3
2 5 2
1 4 1
1 6 3

*/
