Problem: You are given the array a consisting of n elements and the integer k ≤ n.

You want to obtain at least k equal elements in the array a. In one move, you can make one of the following two operations:

  * Take one of the minimum elements of the array and increase its value by one (more formally, if the minimum value of a is mn then you choose such index i that a_i = mn and set a_i := a_i + 1); 
  * take one of the maximum elements of the array and decrease its value by one (more formally, if the maximum value of a is mx then you choose such index i that a_i = mx and set a_i := a_i - 1). 



Your task is to calculate the minimum number of moves required to obtain at least k equal elements in the array.

Input

The first line of the input contains two integers n and k (1 ≤ k ≤ n ≤ 2 ⋅ 10^5) — the number of elements in a and the required number of equal elements.

The second line of the input contains n integers a_1, a_2, ..., a_n (1 ≤ a_i ≤ 10^9), where a_i is the i-th element of a.

Output

Print one integer — the minimum number of moves required to obtain at least k equal elements in the array.

Examples

Input


6 5
1 2 2 4 2 3


Output


3


Input


7 5
3 3 2 1 1 1 3


Output


4

Solution (in JAVA):

Solution:
import java.util.*;
import java.io.*;
import java.math.*;
public class Main{
    public static int gcd(int a,int b){
        if (b==0){
            return a;
        }
        return gcd(b,a%b);
    }
    public static void main(String[] args) throws IOException{
        Reader scan = new Reader();
        scan.init(System.in);
		// Scanner scan = new Scanner(System.in);
        OutputStream output = System.out;
        PrintWriter out = new PrintWriter(output);
        int N = scan.nextInt();
        int k = scan.nextInt();
        int[] arr = new int[N];
        ArrayList<Integer> arr1 = new ArrayList<>();
        for (int i=0;i<N;i++){
            arr[i]=scan.nextInt();
            int A = arr[i];
            while(A>0){
                arr1.add(A);
                A = A/2;
            }
        }
        long c = Long.MAX_VALUE;
        for (int i=0;i<arr1.size();i++){
            PriorityQueue<Integer> list = new PriorityQueue<>();
            for (int j=0;j<N;j++){
                int A = arr[j];
                int count = 0;
                if (A==arr1.get(i)){
                    list.add(0);
                }
                while(A>arr1.get(i) && A!=arr1.get(i)){
                    A = A/2;
                    count++;
                    if (A==arr1.get(i)){
                        list.add(count);
                        break;
                    }
                }
            }
            if (list.size()>=k){
                long C = 0;
                for (int j=0;j<k;j++){
                    C += list.poll();
                }
                c = Math.min(c,C);
            }
        }
        out.println(c);
        out.close();
    }
}
class Point{

}
class Comp1 implements Comparator<Integer>{
	public int compare(Integer a,Integer b){
		return (int)(b-a);
	}
}
class Reader {
    static BufferedReader reader;
    static StringTokenizer tokenizer;
    static void init(InputStream input) {
        reader = new BufferedReader(
                     new InputStreamReader(input) );
        tokenizer = new StringTokenizer("");
    }
    static String next() throws IOException {
        while ( ! tokenizer.hasMoreTokens() ) {
            tokenizer = new StringTokenizer(
                   reader.readLine() );
        }
        return tokenizer.nextToken();
    }
    static int nextInt() throws IOException {
        return Integer.parseInt( next() );
    }
    static long nextLong() throws IOException {
        return Long.parseLong( next() );
    }
    static double nextDouble() throws IOException {
        return Double.parseDouble( next() );
    }
}