#include <bits/stdc++.h>
using namespace std;
const int maxn=5e5+7;
int n;
struct edge{
	int v,nxt;	
}e[maxn<<1];
int head[maxn<<1],cnt;
void add(int u,int v){
	e[++cnt].v=v;
	e[cnt].nxt=head[u];
	head[u]=cnt;
	return;	
}
int dep[maxn];
void init(int nw,int fa){
	dep[nw]=dep[fa]+1;
	for (int i=head[nw];i;i=e[i].nxt){
		int v=e[i].v;
		if(v==fa) continue;
		init(v,nw);	
	}
}
namespace subtask1{
	int f[maxn][21];
	void dfs(int nw,int fa){
		f[nw][0]=fa;
		for (int i=1;i<=20;i++) f[nw][i]=f[f[nw][i-1]][i-1];
		for (int i=head[nw];i;i=e[i].nxt){
			int v=e[i].v;
			if(v==fa) continue;
			dfs(v,nw);
		}
	}
	int lca(int x,int y){
		if(dep[x]<dep[y]) swap(x,y);
		for (int i=20;i>=0;i--){
			int fx=f[x][i];
			if(dep[fx]>=dep[y]) x=fx;		
		}	
		if(x==y) return x;
		for (int i=20;i>=0;i--){
			int fx=f[x][i],fy=f[y][i];
			if(fx!=fy) x=fx,y=fy;	
		}
		
		return f[x][0];
	}
	void solve(){
		int q;
		cin >> q;
		dfs(1,1);
		for (int i=1;i<=q;i++){
			int l,r,k;
			cin >> l >> r >> k;
			int ans=0;
			for (int j=l;j<=r;j++){
				int rr=j+k-1;
				if(rr>r) break;
				int LCA=j;
				for (int ll=j;ll<=rr;ll++) LCA=lca(LCA,ll);
				ans=max(ans,dep[LCA]);
			}
			cout << ans << endl;
		}
	}
};
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	cin >> n;
	for (int i=1;i<n;i++){
		int u,v;
		cin >> u >> v;
		add(u,v);
		add(v,u);	
	}
	init(1,1);
	if(n<=5000) subtask1::solve();
	return 0;
}
/*
10
1 2
2 3
3 4
4 5
5 6
5 7
5 8
3
5 8 
*/
