n,m = gets.split.map &:to_i
lrd = (n+1).times.map{[]}

qch = Array.new(n+1, false)
q = []

m.times{
  l,r,d = gets.split.map &:to_i
  if !qch[l]
    q << l
    qch[l] = true
  end
  lrd[l] << [l,r,d]
}

hipos = {}

ch = Array.new(n+1, false)

while q.size != 0
  now = q.shift
  if ch[now]
    next
  else
    ch[now] = true
  end
  lrd[now].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
    
    if !ch[r]
      q.unshift(r)
    end
  }
end

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

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