#include<bits/stdc++.h>
using namespace std;
const int MAXN=5*1e5;
const int inf=1e9;
int n,m;
int u,v;
struct edge{
int v,w,next;
}tu[MAXN];
int head[MAXN],vis[MAXN],dis[MAXN],lg[MAXN],depth[MAXN],f[MAXN][22],ce,dis_kk,dis_fk,dis_me,xy_kk,xy_kf,xy_me,ans;
void adde(int u,int v,int w){
tu[++ce].v=v;
tu[ce].w=w;
tu[ce].next=head[u];
head[u]=ce;
}
void dfse(int now,int fath){
f[now][0]=fath;
depth[now]=depth[fath]+1;
for(int i=1;i<=lg[depth[now]];i++){
f[now][i]=f[f[now][i-1]][i-1];
}
for(int i=head[now];i;i=tu[i].next){
if(tu[i].v!=fath){
dfse(tu[i].v,now);
}
}
}
bool is(int vis[],int x,int end){
if(x==end){
return true;
}
for(int i=head[x];i;i=tu[i].next){
if(!vis[tu[i].v]){
vis[tu[i].v]=1;
is(vis,tu[i].v,end);
}
}
return false;
}
int vise[MAXN];
int fis(int vis[],int x,int end,int vise[]){
if(is(vis,x,end)){
return x;
}
for(int i=head[u];i;i=tu[i].next){
if(!vise[tu[i].v]){
vise[tu[i].v]=1;
fis(vis,tu[i].v,end,vise);
}
}
}
int LCA(int a,int b,int end){
memset(vis,0,sizeof(vis));
memset(depth,0,sizeof(depth));
memset(f,0,sizeof(f));
vis[a]=1;vis[b]=1;
if(depth[a]<depth[b]){
swap(a,b);
}
while(depth[a]>depth[b]){
a=f[a][lg[depth[a]-depth[b]]-1];
}
if(a==b){
if(is(vis,a,end)){
return a;
}else{
memset(vise,0,sizeof(vise));
return fis(vis,a,end,vise);
}
}
for(int i=lg[depth[a]-1];i>=0;i--){
if(f[a][i]!=f[b][i]){
a=f[a][i];
b=f[b][i];
}
else{
continue;
}
}
if(!is(vis,f[a][0],end)){
memset(vise,0,sizeof(vise));
return fis(vis,a,end,vise);
}
return f[a][0];
}
int dfs(int x,int y){
queue<int> q;
memset(dis,inf,sizeof(dis));
memset(vis,0,sizeof(vis));
dis[x]=0;
vis[x]=1;
q.push(x);
while(!q.empty()){
int t=q.front();
q.pop();
for(int i=head[t];i;i=tu[i].next){
int v=tu[i].v;
int w=tu[i].w;
if(dis[v]>dis[t]+w){
dis[v]=dis[t]+w;
if(!vis[v]){
vis[v]=1;
q.push(v);
}
}
}
return dis[y];
}
}
void out(int x,int y,int z){
dis_kk=dfs(x,y);
dis_fk=dfs(y,z);
dis_me=dfs(z,x);
int maxx=max(dis_kk,max(dis_fk,dis_me));
ans+=maxx;
if(maxx=dis_kk){
dfse(1,0);
int lca=LCA(y,z,x);
ans+=dfs(lca,z);
cout<<lca<<' '<<ans<<endl;
}else if(maxx=dis_fk){
dfse(1,0);
int lca=LCA(x,z,y);
ans+=dfs(lca,x);
cout<<lca<<" "<<ans<<endl;
}else{
dfse(1,0);
int lca=LCA(x,y,z);
ans+=dfs(lca,y);
cout<<lca<<" "<<ans<<endl;
}
}
int main(){
cin>>n>>m;
for(int i=1;i=n-1;i++){
cin>>u>>v;
adde(u,v,1);
adde(v,u,1);
}
for(int i=1;i<=m;i++){
cin>>xy_kk>>xy_kf>>xy_me;
out(xy_kk,xy_kf,xy_me);
}
return 0;
}