#include<bits/stdc++.h>
using namespace std;
const int N = 5e3+10;
int n,m,op,a,b,c;
struct node{
int id,w;
};
vector<node>e[N];
int cnt[N],vis[N],dis[N];
int spfa(int s){
queue<int>q;
q.push(s);
vis[s]=1;
for(int i=1;i<=n;i++) dis[i]=0x3fffffff;
dis[s]=0;
while(!q.empty()) {
int x=q.front();
q.pop();
vis[x]=0;
for(int i=0;i<e[x].size();i++){
if(dis[e[x][i].id]>dis[x]+e[x][i].w) {
dis[e[x][i].id]=dis[x]+e[x][i].w;
if(!vis[e[x][i].id]) {
vis[e[x][i].id]=1;
q.push(e[x][i].id);
cnt[e[x][i].id]++;
if(cnt[e[x][i].id]>=n) return false;;
}
}
}
}
return true;
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>op;
if(op==1){
cin>>a>>b>>c;
e[a].push_back({b,-c});
}else{
if(op==2){
cin>>a>>b>>c;
e[b].push_back({a,c});
} else{
e[a].push_back({b,-c});
e[b].push_back({a,c});
}
}
}
for(int i=1;i<=n;i++) e[n+1].push_back({i,0});
if(spfa(n+1)) {
cout<<"Yes";
}else{
cout<<"No";
}
return 0;
}