n,m = gets.split.map &:to_i
lrd = m.times.map{
  l,r,d = gets.split.map &:to_i
  if l>r
    tmp = l
    l = r
    r = tmp
    d = -d
  end
  [l,r,d]
}.sort{|a,b| s = a[0]<=>b[0]; (s!=0)? s : a[1]<=>b[0]}

hipos = {}

lrd.each{|(l,r,d)|
  if  hipos[l] && hipos[r]
    #どちらもあるので正しいかみる
    if hipos[l]+d != hipos[r]
      puts 'No'
      exit
    end
  elsif hipos[l]
    #rがないのでいれる
    hipos[r] = hipos[l]+d
  elsif hipos[r]
    #lがないのでいれる
    hipos[l] = hipos[r]-d
  else
    #どちらもないのでいれる
    hipos[l] = 0
    hipos[r] = d
  end
}

max = 0
min = 10**9
n.times{|i|
  w = hipos[i+1]
  max = w if max < w
  min = w if min > w
}

if max-min <= (10**9)
  puts 'Yes'
else
  puts 'No'
end