#include<bits/stdc++.h>
#define fo(i,l,r) for(int i=(l);i<=(r);++i)
#define fd(i,l,r) for(int i=(l);i>=(r);--i)
#define fu(i,l,r) for(int i=(l);i<(r);++i)
#define ll long long
using namespace std;
int read(){int s=0;char c=getchar();while(c<48||c>57)c=getchar();while(c>=48&&c<=57)s=(s<<3)+(s<<1)+(c^48),c=getchar();return s;}
void out(int x){if(x>9)out(x/10);putchar(x%10+48);}
const int N=500007,L=19;
int n,dfn[N],f[N],cnt,dep[N],top,t[N<<2],ans[N],q;
struct node{
int x,y;
}st[N];
struct opr{
int x,y;
};
struct Qry{
int l,r,bh;
};
vector<opr>b[N];
vector<Qry>Q[N];
int tot,to[N<<1],head[N],nx[N<<1];
void add(int x,int y){to[++tot]=y;nx[tot]=head[x];head[x]=tot;}
int g[N][L+1],h[N][L+1];
int Min(int x,int y){return dep[x]<dep[y]?x:y;}
void dfs(int x,int y)
{
dfn[x]=++cnt;g[cnt][0]=x;
for(int i=head[x],j;i;i=nx[i])
{
j=to[i];if(j==y) continue;
dep[j]=dep[x]+1;f[j]=x;dfs(j,x);
}
}
void init()
{
fo(j,1,L) fo(i,1,n-(1<<j)+1) g[i][j]=Min(g[i][j-1],g[i+(1<<j-1)][j-1]);
}
int LCA(int x,int y)
{
if(x==y) return x;
x=dfn[x];y=dfn[y];
if(x>y) swap(x,y);
int l=31-__builtin_clz(y-x);
return f[Min(g[x+1][l],g[y-(1<<l)+1][l])];
}
void ins(int l,int r,int c)
{
b[r-l+1].push_back((opr){l,c});
}
int query(int l,int r)
{
int o=31-__builtin_clz(r-l+1);
return LCA(h[l][o],h[r-(1<<o)+1][o]);
}
void upd(int l,int r,int o,int x,int y)
{
if(l==r){t[o]=max(t[o],y);return;}
int mid=l+r>>1;
if(x<=mid) upd(l,mid,o+o,x,y);
else upd(mid+1,r,o+o+1,x,y);
t[o]=max(t[o+o],t[o+o+1]);
}
int qry(int l,int r,int o,int x,int y)
{
if(x<=l&&r<=y) return t[o];
int mid=l+r>>1;
if(y<=mid) return qry(l,mid,o+o,x,y);
if(x>mid) return qry(mid+1,r,o+o+1,x,y);
return max(qry(l,mid,o+o,x,y),qry(mid+1,r,o+o+1,x,y));
}
int main()
{
freopen("query.in","r",stdin);
freopen("query.out","w",stdout);
n=read();
for(int i=1,u,v;i<n;++i) u=read(),v=read(),add(u,v),add(v,u);
dep[1]=1;dfs(1,0);
init();
fd(i,n,1)
{
int l=i,o=i;
while(top&&(o==st[top].x||LCA(i,st[top].x)!=st[top].x))
{
ins(i+1,st[top].y,dep[st[top].x]);
o=LCA(i,st[top].x);l=st[top].y;top--;
}
st[++top]=(node){o,l};
if(i!=o) st[++top]=(node){i,i};
}
fo(i,1,n) h[i][0]=i;
fo(j,1,L) fo(i,1,n-(1<<j)+1) h[i][j]=LCA(h[i][j-1],h[i+(1<<j-1)][j-1]);
q=read();
fo(i,1,q)
{
int l,r,k;l=read();r=read();k=read();
ans[i]=dep[query(l,l+k-1)];
Q[k].push_back((Qry){l,r-k+1,i});
}
fd(i,n,1)
{
for(opr w:b[i]) upd(1,n,1,w.x,w.y);
for(Qry w:Q[i]) ans[w.bh]=max(ans[w.bh],qry(1,n,1,w.l,w.r));
}
fo(i,1,q) out(ans[i]),putchar('\n');
}