#include using namespace std; struct uns_t {} uns; template auto vec(Element init, Head arg, Args ...args) { if constexpr (sizeof...(Args) == 0) return std::vector(arg, init); else return std::vector(arg, vec(init, args...)); } template auto vec(uns_t, Head arg, Args ...args) { return vec(Element(), arg, args...); } int main() { int64_t n, k; cin >> n >> k; auto a = vec(uns, n); for (auto &e : a) cin >> e; auto pos = [&]() { int64_t prev = 0; for (int i = 0; i < k; ++i) { prev += abs(a[i] - a[k / 2]); } int pos = k / 2; int64_t sub = prev; for (int i = k / 2 + 1; i < n - (k - 1) / 2; ++i) { auto cnt = prev; cnt -= abs(a[i - k / 2 - 1] - a[i - 1]); cnt += abs(a[i + (k - 1) / 2] - a[i]); cnt += abs(a[i] - a[i - 1]) * (k / 2); cnt -= abs(a[i] - a[i - 1]) * ((k - 1) / 2); if (cnt < sub) { pos = i; sub = cnt; } prev = cnt; } return pos; }(); auto ans = [&]() { int64_t prev = 0; for (int i = 0; i < n; ++i) { if (pos - k / 2 <= i && i < pos + (k + 1) / 2) { prev += abs(a[i] - a[pos - k / 2]); } else { prev -= abs(a[i] - a[pos - k / 2]); } } int64_t ans = prev; for (int i = pos - k / 2 + 1; i < pos + (k + 1) / 2; ++i) { auto cnt = prev; auto d = a[i] - a[i - 1]; cnt -= d * (pos - k / 2); cnt += d * (i - (pos - k / 2)); cnt -= d * (pos + (k + 1) / 2 - i); cnt += d * (n - (pos + (k + 1) / 2)); ans = min(ans, cnt); prev = cnt; } return ans; }(); cout << ans << endl; }