#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 5e4+5;
const int inf = INT_MAX;
int head[N], cnt1, dis[N], to[N], val[N], nxt[N], cnt[N];
int n, m;
bool vis[N];
void add(int a, int b, int c){
to[++cnt1] = b;
val[cnt1] = c;
nxt[cnt1] = head[a];
head[a] = cnt1;
}
queue<int> q;
bool spfa(int s){
for (int i = 1;i <= n;i++) dis[i] = -inf;
dis[s] = 0;vis[s] = 1;cnt[s] = 1;q.push(s);
while (q.size()){
int u = q.front();
q.pop();
vis[u] = 0;
for (int i = head[u];i;i = nxt[i]){
int v = to[i];
if (dis[v] < (ll)dis[u] + val[i]){
dis[v] = dis[u] + val[i];
if (!vis[v]){
q.push(v);
vis[v] = 1;
++cnt[v];
if (cnt[v] == n + 1)return 0;
}
}
}
}
return 1;
}
int main(){
cin >> n >> m;
for (int i = 1;i <= m;i++){
int op, a, b, c;
cin >> op >> a >> b;
if (op == 1){
cin >> c;
add(a, b, -c);
}
else if (op == 2){
cin >> c;
add(b, a, c);
}
else{
add(a, b, 0);
add(b, a, 0);
}
}
for (int i = 1;i <= n;i++) add(n + 1, i, 0);
if(spfa(n + 1)){
cout << "Yes";
}
else cout << "No";
return 0;
}