#include <bits/stdc++.h>
using namespace std;
template <class T, class U>
inline void Max(T &a, U b) {
  if (a < b) a = b;
}
template <class T, class U>
inline void Min(T &a, U b) {
  if (a > b) a = b;
}
long long dp[100005];
long long n, m, l, r, d;
vector<pair<int, long long>> G[100005];
bool vst[100005];
bool dfs(long long u, long long p, long long dis) {
  if (vst[u]) {
    return dp[u] == dp[p] + dis;
  }
  dp[u] = dp[p] + dis;
  vst[u] = true;
  if (dp[u] != dp[p] + dis) return false;
  for (auto &e : G[u]) {
    if (!dfs(e.first, u, e.second)) return false;
  }
  return true;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    cin >> l >> r >> d;
    G[l].emplace_back(r, d);
    G[r].emplace_back(l, -d);
  }
  dp[0] = 0;
  for (int i = 1; i <= n; ++i) {
    if (!dfs(i, 0, 0)) {
      cout << "No" << endl;
      return 0;
    }
  }
  cout << "Yes" << endl;
}
