def main(): import sys input = sys.stdin.read().split() ptr = 0 N = int(input[ptr]) ptr += 1 K = int(input[ptr]) ptr += 1 p = list(map(int, input[ptr:ptr+N])) ptr += N B = list(map(int, input[ptr:ptr+N])) ptr += N if K == 0: print(0) return def initial_distance(p, B): return sum(abs(a - b) for a, b in zip(p, B)) total = initial_distance(p, B) if K == 1: print(total) return if N <= 12: # Find cycle from collections import OrderedDict seen = OrderedDict() current = p.copy() cycle = [] key = tuple(current) while key not in seen: seen[key] = len(cycle) cycle.append(current.copy()) # Generate next permutation i = N-2 while i >=0 and current[i] >= current[i+1]: i -= 1 if i == -1: current = current[::-1] else: j = N-1 while current[j] <= current[i]: j -= 1 current[i], current[j] = current[j], current[i] left = i+1 right = N-1 while left < right: current[left], current[right] = current[right], current[left] left +=1 right -=1 key = tuple(current) # Find where the cycle starts start_idx = seen[key] cycle = cycle[start_idx:] # Precompute distances cycle_distances = [initial_distance(perm, B) for perm in cycle] cycle_length = len(cycle) # Compute total if K <= start_idx: # All steps are before the cycle print(sum(initial_distance(perm, B) for perm in seen.keys()[:K])) else: sum_before_cycle = sum(initial_distance(perm, B) for perm in list(seen.keys())[:start_idx]) K -= start_idx full_cycles = K // cycle_length remainder = K % cycle_length sum_cycle = sum(cycle_distances) total = sum_before_cycle + full_cycles * sum_cycle + sum(cycle_distances[:remainder]) print(total) return else: current = p.copy() current_sum = initial_distance(current, B) total_sum = current_sum for _ in range(K-1): # Generate next permutation i = N-2 while i >= 0 and current[i] >= current[i+1]: i -= 1 if i == -1: # Wrap around, all elements change old = current.copy() current = current[::-1] # Update current_sum new_sum = initial_distance(current, B) total_sum += new_sum current_sum = new_sum else: # Find j j = N-1 while current[j] <= current[i]: j -= 1 # Swap i and j # Update current_sum current_sum -= abs(current[i] - B[i]) current_sum -= abs(current[j] - B[j]) current[i], current[j] = current[j], current[i] current_sum += abs(current[i] - B[i]) current_sum += abs(current[j] - B[j]) # Reverse from i+1 to end left = i+1 right = N-1 while left < right: # Swap left and right current_sum -= abs(current[left] - B[left]) current_sum -= abs(current[right] - B[right]) current[left], current[right] = current[right], current[left] current_sum += abs(current[left] - B[left]) current_sum += abs(current[right] - B[right]) left += 1 right -= 1 total_sum += current_sum print(total_sum) return if __name__ == "__main__": main()