#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=5e5,L=__lg(N)+1;
int n,q,dfn[N+5],fa[N+5],st[L][N+5],cnt,dep[N+5],lc[L][N+5];
vector<int> e[N+5];
void dfs(int u){
	dep[u]=dep[fa[u]]+1;
	st[0][dfn[u]=++cnt]=fa[u];
	for(int v:e[u]) if(v!=fa[u]){
		fa[v]=u,dfs(v);
	}
}
int get(int x,int y){
	return dfn[x]<dfn[y]?x:y;
}
int lca(int x,int y){
	if(x==y) return x;
	if((x=dfn[x])>(y=dfn[y])) swap(x,y);
	int d=__lg(y-x++);
	return get(st[d][x],st[d][y-(1<<d)+1]);
}
int qry(int l,int r){
	int d=__lg(r-l+1);
	return lca(lc[d][l],lc[d][r-(1<<d)+1]);
}
namespace PlanA{
const int N=5000;
int q;
void main(){
	cin>>q;
	while(q--){
		int l,r,k,ans=0;
		cin>>l>>r>>k;
		for(int i=l;i+k-1<=r;++i){
			ans=max(ans,dep[qry(i,i+k-1)]);
		}
		cout<<ans<<'\n';
	}
}
}
namespace PlanB{
int get(int x,int y){
	return dep[x]<dep[y]?x:y;
}
int qry(int l,int r){
	int d=__lg(r-l+1);
	return get(lc[d][l],lc[d][r-(1<<d)+1]);
}
int q;
void main(){
	for(int i=1;i<=n;++i) lc[0][i]=dep[i];
	for(int i=1;i<=__lg(n);++i){
		for(int j=1;j<=n-(1<<i)+1;++j){
			lc[i][j]=get(lc[i-1][j],lc[i-1][j+(1<<(i-1))]);
		}
	}
	cin>>q;
	while(q--){
		int l,r,k;cin>>l>>r>>k;
		while(1){
			
		}
	}
}
}

int 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;++i){
		cin>>u>>v;
		e[u].push_back(v),e[v].push_back(u); 
	}
	dfs(1);
	for(int i=1;i<=__lg(n);++i){
		for(int j=1;j<=n-(1<<i)+1;++j){
			st[i][j]=get(st[i-1][j],st[i-1][j+(1<<(i-1))]);
		}
	}
	for(int i=1;i<=n;++i) lc[0][i]=i;
	for(int i=1;i<=__lg(n);++i){
		for(int j=1;j<=n-(1<<i)+1;++j){
			lc[i][j]=lca(lc[i-1][j],lc[i-1][j+(1<<(i-1))]);
		}
	}
	if(n<=5000){PlanA::main(); return 0;} 
	cin>>q;
	while(q--){
		int l,r,k;
		cin>>l>>r>>k;
		cout<<dep[qry(l,r)]<<'\n';
	}
}
