1 #include <bits/stdc++.h>
2 using namespace std;
3 int n,m;
4 int minv[30],mina[30],area=0,minarea=1<<30;
5 int maxvb(int n,int r,int h) {
6 int v=0;
7 for(int i=0; i<n; i++) {
8 v+=(r-i)*(r-i)*(h-i);
9 }
10 return v;
11 }
12 void dfs(int v,int n,int r,int h) {
13 if(n==0) {
14 if(v)return;
15 else {
16 minarea=min(minarea,area);
17 }
18 }
19 if(v<0)return;
20 if(minv[n]>v)return;
21 if(area+mina[n]>=minarea)return;
22 if(h<n||r<n)return;
23 if(maxvb(n,r,h)<v)return;
24 for(int rr=r; rr>=n; rr--) {
25 if(n==m)area=rr*rr;
26 for(int hh=h; hh>=n; hh--) {
27 area+=2*rr*hh;
28 dfs(v-rr*rr*hh,n-1,rr-1,hh-1);
29 area-=2*rr*hh;
30 }
31 }
32 }
33 int main() {
34 cin>>n>>m;
35 mina[0]=0;
36 minv[0]=0;
37 for(int i=1; i<=m; i++) {
38 minv[i]=minv[i-1]+i*i*i;
39 mina[i]=mina[i-1]+2*i*i;
40 }
41 if(minv[m]>n)cout<<0<<endl;
42 else {
43 int maxh=(n-minv[m-1])/(m*m)+1;
44 int maxr=sqrt(double(n-minv[m-1])/m)+1;
45 area=0;
46 minarea=1<<30;
47 dfs(n,m,maxr,maxh);
48 if(minarea==1<<30)cout<<0<<endl;
49 else cout<<minarea<<endl;
50 }
51 return 0;
52 }