#include <bits/stdc++.h>
#define int long long
#define r(i,n) for(int i=0;i<n;i++)
using namespace std;
typedef pair<int,int>P;
typedef pair<P,int>P2;
#define fi first
#define se second
int ans[100009];
int Q=1e16,flag=0;
 main(){
  r(i,100009)ans[i]=Q;
  int n,m;
  cin>>n>>m;
  vector<P2>v1,v2;
  r(i,m){
    int a,b,c;
    cin>>a>>b>>c;
    v1.push_back(P2(P(a,b),c));
    v2.push_back(P2(P(b,a),c));
  }
  sort(v1.begin(),v1.end());
  sort(v2.begin(),v2.end());
  map<int,int>M;
  ans[1]=0;
  int x1=0,x2=0;
  for(int X=1;X<=n;X++){
    while(x1<m&&v1[x1].fi.fi==X){
      int l=v1[x1].fi.fi;
      int r=v1[x1].fi.se;
      int cost=v1[x1].se;
      if(ans[l]==Q&&ans[r]==Q){
        ans[l]=0;
        ans[r]=cost;
      }
      else if(ans[l]!=Q&&ans[r]==Q){
        ans[r]=ans[l]+cost;
      }
      else if(ans[l]==Q&&ans[r]!=Q){
        ans[l]=ans[r]-cost;
      }
      else{
        if(ans[l]+cost!=ans[r])flag++;
      }
      x1++;
    }
    while(x2<m&&v2[x2].fi.fi==X){
      int r=v2[x2].fi.fi;
      int l=v2[x2].fi.se;
      int cost=v2[x2].se;
      if(ans[l]==Q&&ans[r]==Q){
        ans[l]=0;
        ans[r]=cost;
      }
      else if(ans[l]!=Q&&ans[r]==Q){
        ans[r]=ans[l]+cost;
      }
      else if(ans[l]==Q&&ans[r]!=Q){
        ans[l]=ans[r]-cost;
      }
      else{
        if(ans[l]+cost!=ans[r])flag++;
      }
      x2++;
    }
  }
  if(flag)cout<<"No"<<endl;
  else cout<<"Yes"<<endl;
}