import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int n,k;
Scanner in=new Scanner(System.in);
n = in.nextInt();
k = in.nextInt();
//口罩数量
int[] a=new int[n+1];
for (int i=1;i<=n;i++){
a[i]=in.nextInt();
}
heap(a);
int degree=0;
int day=0;
while (degree<k){
degree+=a[1];
a[1]*=2;
sink(a,1);
day++;
}
System.out.println(--day);
}
/*
将数组堆化为小根堆
*/
public static void heap(int[] a){
for (int i = (a.length-1)/2; i >=1 ; i--) {
sink(a,i);
}
}
private static void swim(int[] a,int k){
while(a[k]<a[k/2]&&k>1){
exch(a,k,k/2);
k=k/2;
}
}
private static void sink(int[] a, int k) {
int N = a.length-1;
while (2 * k <= N) {
int j = 2 * k; //左子结点
if (j < N && a[j] > a[j + 1])j++; //右结点更小,交换右节点
if (a[j] >= a[k]) break;
exch(a, j, k);
k = j;
}
}
private static void exch(int[] a,int x,int y){
int temp=a[x];
a[x]=a[y];
a[y]=temp;
}
}