#include<stdio.h>
#include
<math.h>
#define max 0x7fffffff
int mins[25],minv[25],ms,m,n;

void DFS(int cur_f,int last_r,int last_h,int leave_v,int sum_s)
int i,h,max_h,j,cur_v,cur_s;
  
if(sum_s+mins[cur_f]>=ms||leave_v<minv[cur_f])
    
return;
  
if(cur_f==0){
              
if(leave_v==0&&sum_s<ms) 
                 ms
=sum_s;
              
return;
         }

  
for(i=last_r-1;i>=cur_f;i--){
    h
=(int)((leave_v-minv[cur_f-1])/(double)(i*i));
    
if(last_h-1<h)
      max_h
=last_h-1;
    
else max_h=h;
      
for(j=max_h;j>=cur_f;j--){
          
if(2*(leave_v-i*i*j)/i+sum_s+2*i*j>=ms) continue;
          cur_s
=2*i*j;
          cur_v
=i*i*j;
           
if(cur_f==m) cur_s+=i*i;
          DFS(cur_f
-1,i,j,leave_v-cur_v,sum_s+cur_s);
        }

    }

}



int main()
int i,beg;
  mins[
0]=0;
      minv[
0]=0;
     
for(i=1;i<=20;i++){
       mins[i]
=mins[i-1]+2*i*i;
       minv[i]
=minv[i-1]+i*i*i;
      }

  
while(scanf("%d%d",&n,&m)!=EOF&&n&&m)
   
{ ms=max;
     beg
=(int)sqrt((double)n/m)+1;
     DFS(m,beg,beg,n,
0);
     
if(ms!=max) printf("%d\n",ms);
     
else printf("0\n");
     }

     
  
return 0;
}