#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node{
int c,v;
double q;
}T[35];
bool cmp(node a, node b ){
return a.q<b.q;
}
int main(){
int n ,L;
while(scanf("%d%d",&n,&L)!=EOF){
for(int i=0;i<n;i++){
scanf("%d",&T[i].c);
T[i].v = 1<<i;
T[i].q =1.0*T[i].c/T[i].v;
}
sort(T,T+n,cmp);
int need=L;
ll ans1=0; ll ans2 =LLONG_MAX;
for(int i=0;i<n;i++){
ll num = need/T[i].v;
ans1+= num*T[i].c;
need %= T[i].v;
if( need ==0){
break;
}
ans2 =min(ans2,ans1+T[i].c);
}
if(need) printf("%lld\n",ans2);
else printf("%lld\n",min(ans1,ans2));
}
return 0;
}