#include<bits/stdc++.h>
#define N 500005
using namespace std;
int head[N],d[N]; bool vis[N],flag=false;
int n,m,x,y,z,kk=0;
struct Edge{int nxt,to,step;}e[N];
void link(int x,int y,int z){e[++kk].nxt=head[x];e[kk].to=y;e[kk].step=z;head[x]=kk;}
void dfs(int u)
{
	if (flag) return; vis[u]=true;
	for (int i=head[u];i;i=e[i].nxt){
		int v=e[i].to; if (flag) return;
		if (d[u]+e[i].step<d[v]){
			d[v]=d[u]+e[i].step;
			if (vis[v]){flag=true;return;}
			else dfs(v);
		}
	} vis[u]=false;
}
int main()
{
	scanf("%d%d",&n,&m);
	for (int i=1;i<=m;i++){
		scanf("%d%d%d",&x,&y,&z);
		link(x,y,z);link(y,x,-z);
	} flag=false;
	for (int i=1;i<=n;i++){
		dfs(i); if (flag) break;
	} if (flag) puts("No"); else puts("Yes");
	return 0;
}