import sys from bisect import bisect_right def main(): M, K = map(int, sys.stdin.readline().split()) A = list(map(int, sys.stdin.readline().split())) N = M * K same_inversion = 0 pos = {} for a in A: pos.setdefault(a, []) pos[a].append(len(pos[a])) for a in pos: cnt = [0] * (len(pos[a]) + 1) def update(i): i += 1 while i < len(cnt): cnt[i] += 1 i += i & -i def query(i): res = 0 i += 1 while i > 0: res += cnt[i] i -= i & -i return res for idx in reversed(pos[a]): same_inversion += query(idx - 1) update(idx) min_total = float('inf') for x in range(M): elements = [] count = {a: 0 for a in range(M)} for a in A: k = count[a] i_val = (a - x) % M + k * M elements.append(i_val) count[a] += 1 sorted_unique = sorted(elements) rank = {v: i + 1 for i, v in enumerate(sorted_unique)} ft = [0] * (len(elements) + 2) res = 0 for i in reversed(range(len(elements))): v = elements[i] r = rank[v] idx = r while idx > 0: res += ft[idx] idx -= idx & -idx idx = r while idx < len(ft): ft[idx] += 1 idx += idx & -idx total = res + same_inversion if total < min_total: min_total = total print(min_total) if __name__ == "__main__": main()