import bisect import math class FenwickTree: def __init__(self, n): # 0-indexed self.N = n self.bit = [0] * n self.M = 1 << (31 - int(math.ceil(math.log2(self.N)))) def add(self, i, val): while i < self.N: self.bit[i] += val i |= i + 1 def sum(self, n): """[0, n)""" ret = 0 n -= 1 while n >= 0: ret += self.bit[n] n = (n & (n + 1)) - 1 return ret def sum_lr(self, l, r): """[l, r)""" return self.sum(r) - self.sum(l) def count_index(self, w): x = 0 k = self.M - 1 while True: if x + k < self.N and self.bit[x + k] < w: w -= self.bit[x + k] x += k + 1 if k == 0: break k >>= 1 return x def solve(): n, k = map(int, input().split()) A = list(map(int, input().split())) if k == 1: return 0 compressor = list(set(A)) compressor.sort() def compress(x): return bisect.bisect_left(compressor, x) C = [compress(a) for a in A] m = len(compressor) counter = FenwickTree(m) for i in range(k): counter.add(C[i], 1) k2 = k // 2 + 1 medians = [] medians.append(counter.count_index(k2)) for i in range(k, n): counter.add(C[i], 1) counter.add(C[i-k], -1) medians.append(counter.count_index(k2)) ans = 1e18 ft_cnt = FenwickTree(m) ft_sum = FenwickTree(m) for i in range(n): c = compress(A[i]) ft_cnt.add(c, 1) ft_sum.add(c, A[i]) if i >= k: r = compress(A[i - k]) ft_cnt.add(r, -1) ft_sum.add(r, -A[i - k]) if i >= k - 1: median_c = medians[i - k + 1] median = compressor[median_c] lower_cnt = ft_cnt.sum(median_c) lower_sum = ft_sum.sum(median_c) higher_cnt = ft_cnt.sum_lr(median_c, m) higher_sum = ft_sum.sum_lr(median_c, m) inc_cost = median * lower_cnt - lower_sum dec_cost = higher_sum - median * higher_cnt cand = inc_cost + dec_cost ans = min(ans, cand) return ans if __name__ == '__main__': print(solve())