#include<bits/stdc++.h>
using namespace std;
using ll=long long;
using pll=pair<ll,ll>;
const int N=1e5+10,inf=1e9;
const ll M=1e18;
int n,m;
vector<vector<pll>> g;
void SPFA()
{
vector<ll> dist(n+1,-1e18);
vector<int> cnt(n+1,0);
dist[0]=0;
cnt[0]=0;
queue<int> q;
q.push(0);
bool ok=0;
while(!q.empty()){
auto u=q.front();
q.pop();
for(auto &[v,w]:g[u]){
if(dist[u]+w>dist[v]){
dist[v]=dist[u]+w;
q.push(v);
cnt[v]++;
if(cnt[v]==n){
cout<<"No";
return;
}
}
}
}
cout<<"Yes";
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr),cout.tie(nullptr);
cin>>n>>m;
g.assign(n+1,vector<pll>());
for(int i=1;i<=m;i++){
int op,a,b,c;
cin>>op>>a>>b;
if(op==1){
cin>>c;
g[b].push_back({a,c});
}
else if(op==2){
cin>>c;
g[a].push_back({b,-c});
}
else {
c=0;
g[a].push_back({b,c});
g[b].push_back({a,c});
}
g[0].push_back({i,0});
}
SPFA();
return 0;
}