#include<cstdio>
using namespace std;
int a[50] = {0};
char s[50] = {'\0'};
struct node
{
int v = 0;
bool exi = false;
int c[50] = {0};
};
struct node ans[50] = {},cut[50][10] = {};
node culc(int,int);
node mul(node,node);
node Max(node,node);
int main()
{
int k = 0,n = 0;
scanf("%d %d",&n,&k);
scanf("%s",s);
for(int i = 0;i < n;i++)
{
a[i + 1] = s[i] - '0';
}
for(int i = 1;i <= n;i++)
{
ans[i].exi = false;
for(int j = 1;j <= k;j++)
{
cut[i][j].exi = false;
}
}
for(int i = 1;i < n;i++)
{
cut[i][1] = culc(1,i);
for(int j = 2;j <= k;j++)
{
for(int fr = j - 1;fr < i;fr++)
{
if(cut[fr][j - 1].exi)
{
cut[i][j] = Max(cut[i][j],mul(cut[fr][j - 1],culc(fr + 1,i)));
}
}
}
if(cut[i][k].exi)
{
ans[i] = mul(cut[i][k],culc(i + 1,n));
}
}
node lastans;
lastans.exi = false;
for(int i = 1;i < n;i++)
{
node tmp = Max(ans[i],lastans);
lastans = tmp;
}
for(int i = lastans.v;i >= 1;i--)
{
printf("%d",lastans.c[i]);
}
return 0;
}
node culc(int l,int r)
{
node e;
e.v = r - l + 1;
e.exi = true;
for(int i = 1;i <= e.v;i++)
{
e.c[i] = a[r - i + 1];
}
return e;
}
node mul(node e1,node e2)
{
node emul;
emul.exi = true;
emul.v = e1.v + e2.v - 1;
for(int i = 1;i <= emul.v;i++)
{
emul.c[i] = 0;
}
for(int i = 1;i <= e1.v;i++)
{
for(int j = 1;j <= e2.v;j++)
{
emul.c[i + j - 1] += e1.c[i] * e2.c[j];
}
}
int q = 0;
for(int i = 1;i <= emul.v;i++)
{
emul.c[i] += q;
q = emul.c[i] / 10;
emul.c[i] %= 10;
}
while(q > 0)
{
emul.c[++emul.v] = q % 10;
q /= 10;
}
return emul;
}
node Max(node e1,node e2)
{
if((!e1.exi or e1.v < e2.v))
{
return e2;
}
if((!e2.exi or e2.v < e1.v))
{
return e2;
}
for(int i = e1.v;i >= 1;i--)
{
if(e1.c[i] > e2.c[i])
{
return e1;
}
else if(e2.c[i] > e1.c[i])
{
return e2;
}
}
return e1;
}