#include<bits/stdc++.h>
using namespace std;
const int maxn=300005;
int n,m,a,b,c,d,np=0,op;
int first[maxn],dist[maxn],fa[maxn][20],dep[maxn],st[10];
struct edge
{
int next,to,w;
}E[maxn<<1];
void add(int u,int v,int w)
{
E[++np]=(edge){first[u],v,w};
first[u]=np;
}
void DFS(int i,int f,int d,int de)
{
dist[i]=d;
fa[i][0]=f;
dep[i]=de;
for(int j=1;j<=18;j++)
fa[i][j]=fa[fa[i][j-1]][j-1];
for(int p=first[i];p;p=E[p].next)
if(E[p].to!=f)
DFS(E[p].to,i,d+E[p].w,de+1);
}
int LCA(int x,int y)
{
if(dep[x]<dep[y])swap(x,y);
int delta=dep[x]-dep[y],j=0,z;
while(delta)
{
if(delta&1)x=fa[x][j];
delta>>=1;
j++;
}
if(x==y) return x;
for(j=18;j>=0;j--)
if(fa[x][j]!=fa[y][j])x=fa[x][j],y=fa[y][j];
return z=fa[x][0];
}
int len(int a,int b)
{
return dist[a]+dist[b]-2*dist[LCA(a,b)];
}
bool solve1(int a,int b,int c,int d)
{
int ab=len(a,b),cd=len(c,d);
if(len(c,a)+ab+len(b,d)==cd || len(c,b)+ab+len(a,d)==cd)
return 1;
else
return 0;
}
void solve2(int a,int b,int c,int d)
{
st[0]=LCA(a,b);
st[1]=LCA(a,c);
st[2]=LCA(a,d);
st[3]=LCA(b,c);
st[4]=LCA(b,d);
st[5]=LCA(c,d);
sort(st,st+6);
int tot=unique(st,st+6)-st;
int maxv=0;
for(int i=0;i<tot;i++)
for(int j=i+1;j<tot;j++)
if(solve1(st[i],st[j],a,b) && solve1(st[i],st[j],c,d) )
maxv=max(maxv,len(st[i],st[j]));
printf("%d\n",maxv);
}
int main()
{
int u,v,t;
scanf("%d%d",&n,&m);
for(int i=1;i<n;i++)
{
scanf("%d%d%d",&u,&v,&t);
add(u,v,t);
add(v,u,t);
}
DFS(1,0,0,1);
while(m--)
{
scanf("%d%d%d%d%d",&op,&a,&b,&c,&d);
if(op==1)
if(solve1(a,b,c,d))
printf("Yes\n");
else printf("No\n");
else solve2(a,b,c,d);
}
return 0;
}