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;
    }

}