#include <functional>
#include<vector>
#include <iostream>
#include<queue>
using namespace std;
const int N=1e5+10;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n,k;
    cin>>n>>k;
    priority_queue<int,vector<int>,greater<int>> p;
    for(int i=0;i<n;i++){
        int l;
        cin>>l;
        p.push(l);
    }
    int sum=0;
    int tem=p.top();
    while(tem<=k){
        sum++;
        k-=tem;
        p.pop();
        p.push(2*tem);
        tem=p.top();
    }
    cout<<sum;
    return 0;
}

用小根堆处理找动态最值的问题