N, M = gets.split.map(&:to_i) A = N.times.map { gets.split.map(&:to_i) } if N == 1 puts 0 exit end dp = Array.new(N) { Array.new(M, Float::INFINITY) } N.times do |i| if i == 0 M.times do |j| dp[i][j] = A[i][j] end else min_v = Float::INFINITY M.times do |j| dp[i][j] = dp[i - 1][j] + A[i][j] min_v = dp[i][j] if min_v > dp[i][j] end M.times do |j| nv = min_v + A[i][j] dp[i][j] = nv if dp[i][j] > nv end end end puts dp[N - 1].min