#include<bits/stdc++.h>
#include <cstring>
#include <iostream>
#define pie acos(-1)
#define si(a) scanf("%d",&a)
#define sii(a,b) scanf("%d %d",&a,&b)
#define siii(a,b,c) scanf("%d %d %d",&a,&b,&c)
#define sl(a) scanf("%lld",&a)
#define sll(a,b) scanf("%lld %lld",&a,&b)
#define slll(a,b,c) scanf("%lld %lld %lld",&a,&b,&c)
#define ss(st) scanf("%s",st)
#define sch(ch) scanf("%ch",&ch)
#define ps(a) printf("%s",a)
#define newLine() printf("\n")
#define pi(a) printf("%d",a)
#define pii(a,b) printf("%d %d",a,b)
#define piii(a,b,c) printf("%d %d %d",a,b,c)
#define pl(a) printf("%lld",a)
#define pll(a,b) printf("%lld %lld",a,b)
#define plll(a,b,c) printf("%lld %lld %lld",a,b,c)
#define pd(a) printf("%lf",a)
#define pdd(a,b) printf("%lf %lf",a,b)
#define pddd(a,b,c) printf("%lf %lf %lf",a,b,c)
#define pch(c) printf("%ch",c)
#define debug1(str,a) printf("%s=%d\n",str,a)
#define debug2(str1,str2,a,b) printf("%s=%d %s=%d\n",str1,a,str2,b)
#define debug3(str1,str2,str3,a,b,c) printf("%s=%d %s=%d %s=%d\n",str1,a,str2,b,str3,c)
#define debug4(str1,str2,str3,str4,a,b,c,d) printf("%s=%d %s=%d %s=%d %s=%d\n",str1,a,str2,b,str3,c,str4,d)
#define for0(i,n) for(i=0;i<n;i++)
#define for1(i,n) for(i=1;i<=n;i++)
#define forab(i,a,b) for(i=a;i<=b;i++)
#define forstl(i, s) for (__typeof ((s).end ()) i = (s).begin (); i != (s).end (); ++i)
#define NL puts("")
#define sd(a) scanf("%lf",&a)
#define sdd(a,b) scanf("%lf %lf",&a,&b)
#define sddd(a,b,c) scanf("%lf %lf %lf",&a,&b,&c)
#define SP printf(" ")
#define LL long long int
#define ULL unsigned long long int
#define MOD 1000000007
#define pub(x) push_back(x)
#define pob(x) pop_back(x)
#define mem(ara,value) memset(ara,value,sizeof(ara))
#define INF INT_MAX
#define eps 1e-8
#define checkbit(n, pos) (n & (1<<pos))
#define setbit(n, pos) (n | (1<<pos))
#define para(a,b,ara)\
for(int i=a;i<=b;i++){\
    if(i!=0){printf(" ");}\
    printf("%d",ara[i]);\
}\
printf("\n");
#define pvec(vec)\
for(int i=0;i<vec.size();i++){\
    if(i!=0){printf(" ");}\
    printf("%d",vec[i]);\
}\
printf("\n");
#define ppara(n,m,ara)\
for(int i=0;i<n;i++){\
    for(int j=0;j<m;j++){\
        if(j!=0){printf(" ");}\
        printf("%d",ara[i][j]);\
    }\
    printf("\n");\
}
#define ppvec(n,vec)\
for(int i=0;i<n;i++){\
    for(int j=0;j<vec[i].size();j++){\
        if(j!=0){printf(" ");}\
        printf("%d",vec[i][j]);\
    }\
    printf("\n");\
}
#define sara(a,b,ara)\
for(int i=a;i<=b;i++){\
    scanf("%d",&ara[i]);\
}
using namespace std;
LL n,m;
vector <pair<int,int> > adj[100010];
LL tmm=0,fin[100010];
LL color[100010];
vector <int> vrtx;
LL pathVal[100010],indgr[100010];
bool cycle=false;
void input(){
    LL i,j,u,v,w;
    sll(n,m);mem(indgr,0);
    for0(i,n+2){
        adj[i].clear();
    }
    for0(i,m){
        slll(u,v,w);u--;v--;
        adj[u].pub(make_pair(v,w));
        indgr[v]++;
    }
}
void dfs(LL source){
    LL i,j,u;color[source]=1;tmm++;
    for0(i,adj[source].size()){
        u=adj[source][i].first;
        if(color[u]==0){
            dfs(u);
        }
        if(color[u]==1){
            cycle=true;
        }
    }
    tmm++;
    fin[source]=tmm;
    color[source]=2;
}
bool comp(int lhs,int rhs){
    return fin[lhs]>fin[rhs];
}
void solve(){
    mem(color,0);vrtx.clear();
    LL i,j;
    for0(i,n){
        vrtx.pub(i);
    }
    for0(i,n){
        if(color[i]==0){
            dfs(i);
        }
    }
    if(cycle){
        printf("No\n");return;
    }
    sort(vrtx.begin(),vrtx.end(),comp);
//    pvec(vrtx);
    mem(pathVal,-1);
//    pathVal[vrtx[0]]=0;
    for0(i,n){
        if(indgr[vrtx[i]]==0){pathVal[vrtx[i]]=0;}
//        if(pathVal[i]==-1){continue;}
        for0(j,adj[vrtx[i]].size()){
            if(pathVal[adj[vrtx[i]][j].first]==-1){
                pathVal[adj[vrtx[i]][j].first]=pathVal[vrtx[i]]+adj[vrtx[i]][j].second;
            }
            else{
                if(pathVal[adj[vrtx[i]][j].first]!=pathVal[vrtx[i]]+adj[vrtx[i]][j].second){
                    printf("No\n");return;
                }
            }
        }
    }
//    para(0,n-1,pathVal);
    printf("Yes\n");
}
int main(){
//    freopen("input.txt","r",stdin);
    input();
    solve();
    return 0;
}


Measured memory_bytes: 13816