#include<stdio.h>
#include<math.h>
int result=0x7fffffff;//保存最小值
int N,M;
void search(int lev,int m,int curS,int r,int h)//lev剩余的体积 m当前层数 curS 当前总表面积 r半径 h 高度
{
if(!m) //当m==0&&lev==0时,说明方案成立,否则说明到达最高层,直接返回
{
if(!lev&&curS<result)
result=curS;
return ;
}
if(curS>result)//剪枝
return ;
if(curS+lev*2/r>=result)//剪枝
return ;
for(int i=r;i>=m;i--)//每层的h和r最小为m
if(lev>=i)
for(int j=h;j>=m;j--)
if(lev-i*i*j>=0)
if(m==M)
search(lev-i*i*j,m-1,i*i+2*i*j,i-1,j-1);
else
search(lev-i*i*j,m-1,curS+2*i*j,i-1,j-1);
}
int main()
{
scanf("%d %d",&N,&M);
search(N,M,0,sqrt((double)N),N/M);//r小于等于sqrt(N),h小于N/M
if(result<0x7fffffff)
printf("%d\n",result);
else
printf("0\n");
return 1;
}