#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=2*1e5+2;
long long ans;
long long s[maxn],v[maxn];
long long n,m;
void dfs(long long now,long long r,long long h,long long ss,long long vv){
long long flag;
flag=h;
if(ss+s[now-1]>=ans||vv+v[now-1]>n||2*(n-vv)/r+ss>=ans){
return;
}
if(now==0){
if(vv==n){
ans=min(ans,ss);
}
return;
}
for(long long i=r-1;i>=now;i--){
if(now==m){
ss=i*i;
}
flag=min(h-1,n-v[now-1]/(i*i));
for(long long j=flag;j>=now;j--){
dfs(now-1,i,j,ss+2*i*j,vv+i*i*j);
}
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(long long i=1;i<=m;i++){
s[i]=s[i-1]+2*i*i;
v[i]=v[i]+i*i*i;
}
ans=0x3f3f3f3f3f3f;
dfs(m,n,n,0,0);
if(ans>0x3f3f3f3f3f){
cout<<0;
}else{
cout<<ans;
}
return 0;
}
90分 TLE一个点 qiutiao(:~^~:)