#include<bits/stdc++.h>
#define ll long long
#define i128 __int128
#define ull unsigned long long
#define pii pair<int,int>
#define pll pair<long long, long long>
#define fs first
#define sc second
#define endl '\n'
#define debug puts("AK IOI")
#define re register
#define pb push_back
#define mem(a,x) memset((a),(x),sizeof(a))
#define vi vector<int>
#define pq priority_queue
using namespace std;
namespace gsczl71_fastIO {
template <typename T = int>
inline T read() {
T s=0,w=1;char c=getchar();
while(!isdigit(c)){if(c=='-')w=-1;c=getchar();}
while(isdigit(c))s=(s<<1)+(s<<3)+(c^48),c=getchar();
return s*w;
}template <typename T>
inline void read(T &s){s=0;int w=1;char c=getchar();
while(!isdigit(c)){if(c=='-')w=-1;c=getchar();}
while(isdigit(c))s=(s<<1)+(s<<3)+(c^48),c=getchar();
s*=w;
}template <typename T, typename... Args> inline void read(T &x, Args &...args) {read(x), read(args...);}
template <typename T>
inline void write(T x,char ch) {
if(x<0)x=-x,putchar('-');
static char stk[200];
int top=0;do{stk[top++]=x%10+'0',x/=10;}while(x);
while(top)putchar(stk[--top]);
putchar(ch);return;
}
}using namespace gsczl71_fastIO;
#define int long long
const int mod = 1e9+7;
const int inf = 0x3f3f3f3f,N = 2e5+5,M = 1e6+5,K = 3000+5;
const long long linf = 0x3f3f3f3f3f3f3f3f;
int n,m;
int vis[N],dis[N];
vector<pii> mp[N];
void dfs(int x){
for(auto it:mp[x]){
if(!vis[it.fs]){
vis[it.fs] = 1;
dis[it.fs] = dis[x] + it.sc;
dfs(it.fs);
}else if(dis[it.fs] != dis[x] + it.sc){
puts("No\n");exit(0);
}
}
}
void solve(){
n=read(),m=read();
if(!m){cout<<"Yes\n";return ;}
set<int> st;
while(m--){
int l,r,d;l=read(),r=read(),d=read();
mp[l].pb({r,d});st.insert(l);
}for(auto it:st) if(!vis[it]) {vis[it]=1;dfs(it);}
puts("Yes\n");
}
signed main(){
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
int T=1;
while(T--) solve();
return 0;
}