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.io.*; 
import java.util.*;
import java.util.Map.Entry;

public class Hey {
	static int u= 200000 ; 
	static boolean vis[] ; 
	static  int t[][] ;
	static int level(int i)
	{
		if(i==0) return 0 ; 
		else return Integer.toBinaryString(i).length() ; 

	}
	static void f(int i)
	{
		if(!vis[i])
		{
			vis[i]= true ; 
			int lef = 2*i ; int right = 2*i+1 ; 
			if(lef<=u)
			{
				f(lef) ; 
				for(int j=0 ;j<20 ;j++)
				{
					t[i][j]+=( t[lef][j]); 
				}
			}
			if(right<=u)
			{
				f(right) ; 
				for(int j=0 ;j<20 ;j++)
				{
					t[i][j]+=( t[right][j]); 
				}
			}


		}
	}
	public static void main(String[] args) throws IOException {
		BufferedReader  jk =  new BufferedReader(new InputStreamReader( System.in))  ; 
		PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out)) ; 
		StringTokenizer ana = new StringTokenizer(jk.readLine()) ;
		int n = Integer.parseInt(ana.nextToken()) ; 
		int k = Integer.parseInt(ana.nextToken()) ;
		t= new int[ (u+1)][20] ; 
		ana = new StringTokenizer(jk.readLine()) ;
		for(int j=0 ; j<n ;j++)
		{

			int x = Integer.parseInt(ana.nextToken()) ; 
			int l = level(x);
			t[x][l]++ ; 
		}
		vis= new boolean[u+1] ; 
		f(1) ; 
		for(int i=0 ; i<20 ;i++)
		{
			t[0][i]+=t[1][i] ; 
		}
		int cost[] = new int[u+1] ; 
		for(int i=0 ; i<=u ;i++)
		{
			int l0 = level(i);
			int c=0 ; 
			int cos = 0 ; 
			int p =l0 ;
			while(c<k && p<20)
			{
				int an = c; 
				int coef = (p-l0) ; 
				c+=(t[i][p]) ; 
				c= Integer.min(c, k) ; 
				cos+=(coef)*(c-an) ; 
				p++ ;
			}
			if(c<k) cost[i]=-1; 
			else cost[i]= cos ;
		}

		int min = cost[0] ; 
		for(int i=1 ;i<=u ;i++)
		{
			int x = cost[i] ; 
			if(x!=-1) min = Integer.min(x, min) ;
		}
		System.out.println(min);
	
		









		out.flush(); 
	}

}