#include <cstdio>
#include <vector>

using namespace std;

void re(int &x){
	x=0;int c=getchar();
	while(c<'0'||c>'9') c=getchar();
	while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();
}

const int N=514114;

vector<int> vc[N];

namespace LCA{
	int fa[N],dfn[N],idf[N],dep[N],dc;
	void dfs(int u,int l){
		idf[dfn[u]=++dc]=u;fa[u]=l;dep[u]=dep[l]+1;
		for(int v:vc[u]) if(v!=l) dfs(v,u);
	}
	int s[N][20];
	int dec(int x,int y){return dep[x]<dep[y]?x:y;}
	void build(int n){
		for(int i=1;i<=n;++i) s[i][0]=idf[i];
		for(int l=1;1<<l<=n;++l) for(int i=1;i+(1<<l)-1<=n;++i) s[i][l]=dec(s[i][l-1],s[i+(1<<l-1)][l-1]);
	}
	int lca(int x,int y){
		if(x==y) return x;
		x=dfn[x];y=dfn[y];if(x>y) swap(x,y);
		++x;int l=__lg(y-x+1);
		return fa[dec(s[x][l],s[y-(1<<l)+1][l])];
	}
}

namespace ST{
	int s[N][20];
	void build(int n){
		LCA::dfs(1,0);LCA::build(n);
		for(int i=1;i<=n;++i) s[i][0]=i;
		for(int l=1;1<<l<=n;++l) for(int i=1;i+(1<<l)-1<=n;++i) s[i][l]=LCA::lca(s[i][l-1],s[i+(1<<l-1)][l-1]);
	}
	int qry(int x,int y){
		if(x>y) swap(x,y);
		int l=__lg(y-x+1);
		return LCA::lca(s[x][l],s[y-(1<<l)+1][l]);
	}
}
/*

namespace S{
	struct node{
		int x,l,r,mx;unsigned pr;
		#define x(v) t[v].x
		#define l(v) t[v].l
		#define r(v) t[v].r
		#define mx(v) t[v].mx
		#define pr(v) t[v].pr
	}t[N];int rt,tot;
	void init(){
		
	}
	void ins(int k){
		int x,y;div(rt,x,y,k);
		int u=x;while(rs(u)) u=rs(u);
		int v=y;while(ls(v)) v=ls(v);
		t[++tot]={k,k-x(u),x(v)-k,x(v)-x(u),rnd()};
		rt=mrg(mrg(x,tot),y);upd(u);upd(v);
	}
	void del(int k){
		int x,y,z;div(rt,x,z,k);div(x,x,y,k-1);
		int u=x;while(rs(u)) u=rs(u);
		int v=z;while(ls(v)) v=ls(v);
		
	}
}

vector<int> vc[N];

void dfc(int u,int l){
	id[d[u]=d[l]+1]=u;for(int v:vc[u]) if(v!=l) dfc(v,u);
}

struct Q{int l,r,k,id;}q[N],p[N];

void whlBin(int l,int r,int ql,int qr){
	int m=l+r>>1;for(int i=l;i<=m;++i) S::ins(id[i]);
	int pl=0,pr=0;for(int i=ql;i<=qr;++i){
		if(mxd(q[i].l,q[i].r)>m) ans[q[i].id]=m,gr[++pr]=q[i];
		else gl[++pl]=q[i];
	}
	for(int i=1;i<=pl;++i) q[ql+i-1]=gl[i];
	for(int i=1;i<=pr;++i) q[ql+pl+i-1]=gr[i];
	whlBin(m+1,r,ql+pl,qr);
	for(int i=l;i<=m;++i) S::ers(id[i]);
	whlBin(l,m,ql,ql+pl-1);
}
*/

int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	int n,x,y;re(n);for(int i=1;i<n;++i) re(x),re(y),vc[x].push_back(y),vc[y].push_back(x);
	bool F=1;for(int i=1;i<=n;++i) F&=vc[i].size()<=2;
	if(F&&0){
		//dfc(1);int Q;re(Q);for(int i=1;i<=Q;++i) re(q[i].l),re(q[i].r),re(q[i].k),q[i].id=i;
		
	}else{
		ST::build(n);int Q;re(Q);while(Q--){
			int l,r,k,ans=0;re(l);re(r);re(k);
			for(int i=l;i+k-1<=r;++i) ans=max(ans,LCA::dep[ST::qry(i,i+k-1)]);
			printf("%d\n",ans);
		}
	}
}
