#include<bits/stdc++.h>
#define int long long
using namespace std;

const int N=1e5+5;
int n,m;
int h[N],cnt;
int du[N],dep[N],fa[N][26];
int lca[N][26]; 
bool lian=1;

struct Edge{
	int u,v;
}e[N<<1];

void add(int u,int v){
	e[++cnt].v=v;
	e[cnt].u=h[u];
	h[u]=cnt;
}

void dfs(int u){
	dep[u]=dep[fa[u][0]]+1;
	for(int i=1;i<=25;i++)fa[u][i]=fa[fa[u][i-1]][i-1];
	for(int i=h[u],v;i;i=e[i].u){
		v=e[i].v;
		if(v==fa[u][0])continue;
		fa[v][0]=u;
		dfs(v);
	}
}

int glca(int u,int v){
	if(u==v)return u; 
	if(dep[u]<dep[v])swap(u,v);
	for(int i=25;~i;i--)if(dep[fa[u][i]]>=dep[v])u=fa[u][i];
	if(u==v)return u;
	for(int i=25;~i;i--){
		if(fa[u][i]!=fa[v][i]){
			u=fa[u][i];
			v=fa[v][i];
		}
	}
	return fa[u][0];
}

void solve_lian(){
	cin>>m;
	for(int i=1;i<=m;i++){
		
	}
}

void solve_brt(){
	cin>>m;
	for(int i=1,l,r,k,val,now;i<=m;i++){
		cin>>l>>r>>k;
		val=0;
		if(n>1e5&&k==r-l+1){
			int tp=l;
			now=l;
			for(int j=25;~j;j--){
				if(tp+(1<<(j))/2-1<=r){
					now=glca(now,lca[tp][j]);
					tp+=(1<<j)/2-1;
				}
			}
			cout<<dep[now]<<'\n';
		}
		
		for(int j=l;j<=r;j++){
			if(j+k-1>r)break;
			now=j;
			for(int p=j+1;p<=j+k-1;p++)now=glca(now,p);
			val=max(dep[now],val);
		}
		cout<<val<<'\n';
	}
}

signed main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>n;
	for(int i=1,u,v;i<n;i++){
		cin>>u>>v;
		add(u,v);
		add(v,u);
		du[u]++;
		du[v]++;
		if(du[u]>2||du[v]>2)lian=0;
	}
	dfs(1);
	
	for(int i=1;i<=n;i++)lca[i][0]=i;
	for(int i=1;i<=25;i++){
		for(int j=1;j<=n;j++)lca[j][i]=glca(lca[j][i-1],lca[min(j+(1<<(i-1)),n)][i-1]);
	}
	
//	if(lian)solve_lian();
	solve_brt();
	return 0;
} 
