#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,dep[500005],d[500005],ans,head=1,tail=0;
struct dq {
	int v,id;
} que[600005];
vector<int> g[500005];
bool vis[500005];
int q,l,r,k;
//void dfs(int u,int fa,int depth) {
////	cout<<u<<" "<<fa<<" "<<depth<<endl;
//	dep[u]=depth;
//	vis[u]=1;
//	for(int i=0,v;i<g[u].size(); i++) {
//		v=g[u][i];
//		if(v!=fa&&!vis[v]) {
//			dfs(v,u,depth+1);
//		}
//	}
//	return;
//}
signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	cin>>n;
	for(int i=1,u,v; i<=n-1; i++) {
		cin>>u>>v;
		d[u]++,d[v]++;
		g[u].push_back(v);
		g[v].push_back(u);
	}
	int depth=1,now=1;
	while(1){	
		dep[now]=depth;
		depth++;
		vis[now]=1;
		if(d[now]==1&&now!=1){
			break;
		}
		for(int i=0;i<g[now].size();i++){
			if(!vis[g[now][i]]){
				now=g[now][i];
				break;
			}
		}
	}
	cin>>q;
	while(q--) {
		int l,r,k;
		cin>>l>>r>>k;
		ans=0;
		head=1;
		tail=0;
		for(register int i=l; i<=r; i++) {
			while(head<=tail&&dep[i]<que[tail].v) {
				tail--;
			}
			que[++tail]= {dep[i],i};
			while(head<=tail&&que[tail].id-que[head].id+1>k) {
				head++;
			}
			if(i-l+1>=k){
				ans=max(ans,que[head].v);
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}
