#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string>
#define max(x,y) (x)>(y)?(x):(y)
using namespace std;
const int maxn=1e5+10;
const int maxx=1e13+10;
int pre[maxn];
int lens[maxn];
int find(int i)
{
   while(pre[i]!=i)
   {
       i=pre[i];
   }
   return i;
} 
void bing(int i,int j,int d)
{
    pre[i]=j;
    lens[i]=d;
}
int binglens(int i)
{
    if(pre[i]==i) return 0;
    else
        return lens[i]+binglens(pre[i]);
}
int n,m;
int l,r,d;
int main()
{     
      scanf("%d%d",&n,&m);
      for(int i=0;i<=n;i++)
      {
        pre[i]=i; lens[i]=0;
      }
	  
      for(int i=1;i<=m;i++)
      {
         scanf("%d%d%d",&l,&r,&d);
         int ll=find(l); int rr=find(r);
         //printf("l的父亲是%d      r的父亲是%d\n",ll,rr);
         if(ll!=rr)
         {  
            bing(l,r,d);
            lens[l]=binglens(l);
            //printf("%d的父亲是%d, %d的长度是%d",l,pre[l],l,lens[l] );
            lens[r]=binglens(r);
            //printf("%d的父亲是%d, %d的长度是%d",r,pre[r],r,lens[r] );
         } 
         else 
         {
             lens[l]=binglens(l);
             lens[r]=binglens(r);
           int dis=lens[l]-lens[r];
           if(dis<=0) dis=-dis;
           if(dis!=d)
           {
             printf("No\n");
             return 0;
           }
         }        
      }
      printf("Yes\n");
      return 0;
}