rt,
#include <iostream>
#include <cmath>
#include <climits>
using namespace std;
int n,m,ans=INT_MAX;
int r[17],h[17];
int min_s[17],min_v[17];
void dfs(int dep,int S,int V){
if (dep==0){
if (V==n){
ans=min(ans,S);
}
return;
}
if (V+min_v[dep]>=n) return;
if (S+min_s[dep]>=ans) return;
if (S+2*(n-V)/r[dep+1]>ans) return;
for (int i=r[dep+1]-1;i>=dep;i--){
if (dep==m) S=i*i;
for (int j=min(h[dep+1]-1,(n-V-min_v[dep-1])/(i*i));j>=dep;j--){
h[dep]=j;
r[dep]=i;
dfs(dep-1,S+2*i*j,V+i*i*j);
}
}
}
int main (){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
r[m+1]=sqrt(n);
h[m+1]=sqrt(n);
for (int i=1;i<=m;i++){
min_s[i]=min_s[i-1]+2*i*i;
min_v[i]=min_v[i-1]+i*i*i;
}
dfs(m,0,0);
if (ans==INT_MAX) cout << 0 << endl;
else cout << ans << endl;
return 0;
}