#include<bits/stdc++.h>
using namespace std;
const int N=2e4+10;
int Next[N],head[N],ver[N],edge[N],d[N],tot,v[N];
void add(int x,int y,int z){
ver[++tot]=y,Next[tot]=head[x],head[x]=tot,edge[tot]=z;
}
int n,m,num,flag=0;
void spfa(int x){
v[x]=1;
for(int i=head[x];i;i=Next[i])
if(d[ver[i]]>d[x]+edge[i]){
if (v[ver[i]]){
flag=1;
break;
}
d[ver[i]]=d[x]+edge[i];
spfa(ver[i]);
}
v[x]=0;
}
int main(){
scanf("%d%d",&n,&m);
for (int i=1;i<=m;i++){
int op,x,y,z;
scanf("%d%d%d",&op,&x,&y);
if (op==1){
scanf("%d",&z);
add(x,y,-z);
}
if (op==2){
scanf("%d",&z);
add(y,x,z);
}
if (op==3) add(x,y,0);
}
for (int i=1;i<=n;i++){
d[i]=0;
spfa(i);
}
if (flag) printf("No\n"); else printf("Yes\n");
}