#include<bits/stdc++.h>
#define N 500010
#define M 22
using namespace std;
int read(){
	int x=0,w=1;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
	while(isdigit(ch))x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
	return x*w;
}
int rnd(int l,int r){
	return 1ll*rand()*rand()%(r-l+1)+l;
}
int n;vector<int>e[N];
int f[N][M],dep[N];
void dfs(int u,int fa){
	f[u][0]=fa,dep[u]=dep[fa]+1; 
	for(int i=1;i<M;i++)
		f[u][i]=f[f[u][i-1]][i-1];
	for(int v:e[u]){
		if(v==fa)continue;
		dfs(v,u);
	}
}
int lca(int u,int v){
	if(dep[u]>dep[v])swap(u,v);
	for(int i=M-1;~i;i--)
		if(((dep[v]-dep[u])>>i)&1)v=f[v][i];
	if(u==v)return u;
	for(int i=M-1;~i;i--)
		if(f[u][i]!=f[v][i])u=f[u][i],v=f[v][i];
	return f[u][0];
}
namespace sub1{
	#define _ 5010
	int g[_][_];
	void solve(){
		for(int i=1;i<=n;i++){
			g[i][i]=i;
			for(int j=i+1;j<=n;j++)
				g[i][j]=lca(g[i][j-1],j);
		}
		int q=read(),ans;
		for(int l,r,k;q;q--){
			l=read(),r=read(),k=read(),ans=0;
			for(int i=l;i+k-1<=r;i++)
				ans=max(ans,dep[g[i][i+k-1]]);
			printf("%d\n",ans);
		}
	}
}
int deg[N];
namespace sub2{
	int g[N][M];//wr
	void init(){
		for(int i=1;i<=n;i++)
			g[i][0]=dep[i];
		for(int j=1;j<M;j++)
			for(int i=1;i+(1<<j)-1<=n;i++)
				g[i][j]=min(g[i][j-1],g[i+(1<<(j-1))][j-1]);
	}
	int qry(int l,int r,int s){
		return min(g[l][s],g[r-(1<<s)+1][s]);
	}
	void solve(){
		init();
		int q=read();
//		int q=500000;
		for(int l,r,k;q;q--){
			l=read(),r=read(),k=read();
//			l=1,r=k=n;
			int ans=0,o=120,t=log2(k);
			for(int i;o;o--){
				i=rnd(l,r-k+1);
				ans=max(ans,qry(i,i+k-1,t));
			}
			printf("%d\n",ans);
		}
	}
}
namespace idk{
	int g[N][M];
	void init(){
		for(int i=1;i<=n;i++)
			g[i][0]=i;
		for(int j=1;j<M;j++)
			for(int i=1;i+(1<<j)-1<=n;i++)
				g[i][j]=lca(g[i][j-1],g[i+(1<<(j-1))][j-1]);
	}
	int qry(int l,int r,int s){
		return dep[lca(g[l][s],g[r-(1<<s)+1][s])];
	}
	void solve(){
		init();
		int q=read();
		for(int l,r,k;q;q--){
			l=read(),r=read(),k=read();
			int ans=0,o=10,t=log2(k);
			if(k==r-l+1){
				printf("%d\n",qry(l,r,t));
				continue;
			}
			for(int i;o;o--){
				i=rnd(l,r-k+1);
				ans=max(ans,qry(i,i+k-1,t));
			}
			printf("%d\n",ans);
		}
	}
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	srand(time(0));
	n=read();
//	n=500000;
	for(int i=1,u,v;i<n;i++){
//		u=i,v=i+1;
		u=read(),v=read();
		deg[u]++,deg[v]++;
		e[u].push_back(v),e[v].push_back(u);
	}
	dfs(1,0);
	if(n<=5000)return sub1::solve(),0;
	bool fl2=true;
	for(int i=1;i<=n;i++)
		if(deg[i]>2){fl2=false;break;}
	if(fl2)return sub2::solve(),0;
	idk::solve();
	
	return 0;
}
