#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
const int N=5e5+10;
int n,m,t,d[N];
int f[N][20];
int dist[N];
vector<PII>gra[N];
queue<int>q;
void bfs(){
q.push(1),d[1]=1;
while(!q.empty()){
int x=q.front();q.pop();
for(auto to:gra[x]){
int y=to.first;
int l=to.second;
if(d[y]) continue;
d[y]=d[x]+1;
dist[y]=dist[x]+l;
f[y][0]=x;
for(int j=1;j<=t;++j){
f[y][j]=f[f[y][j-1]][j-1];
}q.push(y);
}
}
}
int lca(int x,int y){
if(d[x]>d[y]) swap(x,y);
for(int i=t;i>=0;--i){
if(d[f[y][i]]>=d[x]) y=f[y][i];
}if(x==y) return x;
for(int i=t;i>=0;--i){
if(f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i];
}return f[x][0];
}
int query(int a,int b,int lca){
return dist[a]+dist[b]-2*dist[lca];
}
void solve(){
cin>>n>>m;
t=log(n)/log(2)+1;
for(int i=0;i<n-1;++i){
int u,v;
cin>>u>>v;
gra[u].push_back({v,1});
gra[v].push_back({u,1});
}bfs();
while(m--){
int a,b,c;
cin>>a>>b>>c;
int ab=lca(a,b);
int bc=lca(b,c);
int ac=lca(a,c);
int dab=d[ab],dbc=d[bc],dac=d[ac];
int p,mx=max(dab,max(dbc,dac));
if(dab==mx) p=ab;
else if(dbc==mx) p=bc;
else p=ac;
int res;
if(dab>=dac&&dab>=dbc){
res=query(a,ab,ab)+query(b,ab,ab)+query(c,ab,ac);
}else if(dac>=dab&&dac>=dbc){
res=query(a,ac,ac)+query(b,ac,ab)+query(c,ac,ac);
}else{
res=query(a,bc,ab)+query(b,bc,bc)+query(c,bc,bc);
}cout<<p<<" "<<res<<"\n";
}
}
signed main(){
ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
solve();
return 0;
}