//枚举,在过程中不断剪枝;
#include<cstdio>
int n,m,ans,minn=2100000000;
void dfs(int d,int v,int s,int r,int h){ //前d层体积.表面积,第d层半径.高;
if(d==m){
if(v==n) minn=s; //通过剪枝得到的一定是最优值;
return;
}
if(s+2*(n-v)/r>=minn) return; //前d层表面积加以后最小表面积大于已有的最小值,剪掉;
if(v+m-d>n) return; //前d层体积加以后最小体积大于全部体积,剪掉;
if(v+(r-1)*(r-1)*(h-1)*(m-d)<n) return;//前d层体积加以后最大体积小于全部体积,剪掉;
for(int i=r-1;i>=m-d;i--){
for(int j=h-1;j>=m-d;j--) //保证Ri>Ri+1,Hi>Hi+1;
if(v+i*i*j<=n&&s+2*i*j<minn)
dfs(d+1,v+i*i*j,s+2*i*j,i,j);
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=m;i*i*m<=n;i++){
for(int j=m;i*i*j<=n;j++)
if(i*i+2*i*j<minn){
dfs(1,i*i*j,i*i+2*i*j,i,j);
}
}
printf("%d\n",minn);
return 0;
}