#pragma comment(linker, "/STACK:1073741824")
#include<bits/stdc++.h>
using namespace std;
int v_max[21],s_max[21],n,m,ans=1e8;//省略Pi
void dfs(int used_v,int used_s,int dp,int r,int h)
{
if(dp==0)
{
if(used_v==n)
ans=used_s;
return;
}
if(used_s+s_max[dp-1]>ans) return;
if(used_v+v_max[dp-1]>n) return;
if(((n-used_v)<<1)/r+used_s >=ans) return;
for(int i=r-1;i>=dp;--i)
{
int pow_i=i*i;
if(dp==m) used_s=pow(i,2);
int cache=min((n-used_v-v_max[dp-1])/pow_i,h-1);
for(int j=cache;j>=dp;--j)
dfs(used_v+pow_i*j,used_s+((i*j)<<1),dp-1,i,j);
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=m+1;i++)
{
v_max[i]=v_max[i-1]+pow(i,3);
s_max[i]=s_max[i-1]+((i*i)<<1);
}
dfs(0,0,m,sqrt(n),n);
if(ans==1e8)
cout<<-1<<endl;
else
cout<<ans<<endl;
return 0;
}
https://www.luogu.com.cn/problem/solution/P1731