NUM, MAX_STEP = gets.split(" ").map(&:to_i)
steps = gets.split(" ").map(&:to_i)
# 各足場に到達するためのコストを格納するdp用配列、初期値は0とする
dp = Array.new(NUM, 0)

# 足場2〜NUMまでの最小コストを順にdpに格納する
1.upto(NUM - 1) do |step_number|
  tmp_costs = []
  # 1〜MAX_STEP手前からのそれぞれのコストを全てtmp_costsに格納する
  # ただし足場1より手前に行かないように、step_numberを最大回数とする
  1.upto([MAX_STEP, step_number].min) do |back|
    # back歩手前までのコストと、back歩手前からstep_numberまでのコストを足して格納する
    tmp_costs << dp[step_number - back] + (steps[step_number - back] - steps[step_number]).abs
  end
  # 最小値をdpに格納する
  dp[step_number] = tmp_costs.min
end

puts dp.last