#include <bits/stdc++.h>
using namespace std;
int n,q,sg[2000009],d[500009],dre[500009],f[500009][29],sg1[5009][5009];
vector<int>tr[500009];
void dfs(int i,int fa){
for (int j:tr[i]){
if (j==fa)continue;
d[j]=d[i]+1;
f[j][0]=i;
dfs(j,i);
}
}
int lca(int a,int b){
int t1=a,t2=b;
if (d[a]>d[b])swap(a,b);
for (int i=20;i>=0;i--){
if (f[b][i]!=0&&d[f[b][i]]>=d[a]){b=f[b][i];}
}
if (a==b)return a;
for (int i=20;i>=0;i--){
if (f[b][i]!=f[a][i])b=f[b][i],a=f[a][i];
}
return f[a][0];
}
void add(int i,int l,int r,int x,int y){
if (l==r){sg[i]=y;return;}
int mid=l+r>>1;
if (x<=mid)add(i*2,l,mid,x,y);
else add(i*2+1,mid+1,r,x,y);
sg[i]=max(sg[i],y);
}
int qurry(int i,int l,int r,int x,int y){
if (l==r){return sg[i];}
int mid=l+r>>1;
int ans=0;
if (x<=mid)ans=max(ans,qurry(i*2,l,mid,x,y));
else ans=max(ans,qurry(i*2+1,mid+1,r,x,y));
}
void add1(int i,int l,int r,int x,int y,int k){
if (l==r){sg1[i][k]=y;return;}
int mid=l+r>>1;
if (x<=mid)add1(i*2,l,mid,x,y,k);
else add1(i*2+1,mid+1,r,x,y,k);
sg1[i][k]=max(sg1[i][k],y);
}
int qurry1(int i,int l,int r,int x,int y,int k){
if (x<=l&&r<=y){return sg1[i][k];}
int mid=l+r>>1;
int ans=0;
if (x<=mid)ans=max(ans,qurry1(i*2,l,mid,x,y,k));
if (y>mid)ans=max(ans,qurry1(i*2+1,mid+1,r,x,y,k));
return ans;
}
void an1(){
dfs(1,0);
for (int i=1;i<=n;i++){
add(1,1,n,i,d[i]);
}
cin>>q;
for (int i=1;i<=n;i++){
}
}
void an2(){
dfs(1,0);
for (int j=1;j<=20;j++){
for (int i=1;i<=n;i++){
f[i][j]=f[f[i][j-1]][j-1];
}
}
for (int i=1;i<=n;i++){
int k=i;
add1(1,1,n,i,d[i],1);
for (int j=2;i+j-1<=n;j++){
k=lca(k,i+j-1);
add1(1,1,n,i,d[k],j);
}
}
cin>>q;
for (int i=1;i<=q;i++){
int l,r,k;
cin>>l>>r>>k;
cout<<qurry1(1,1,n,l,r-k+1,k)<<"\n";
}
}
int main(){
freopen("query.in","r",stdin);
freopen("query.out","w",stdout);
scanf("%d",&n);
int mx=0;
for (int i=1;i<n;i++){
int a,b;
scanf("%d%d",&a,&b);
dre[a]++,dre[b]++;
mx=max(mx,max(dre[a],dre[b]));
tr[a].push_back(b);
tr[b].push_back(a);
}
d[1]=1;
if (n<=5000)an2();
if (mx<=2)an1();
return 0;
}