#include<cstdio>
#include<cstring>
using namespace std;
struct bignum{
int a[1005],len;
void clear(){
len=0;
memset(a,0,sizeof(a));
}
bignum get(int l,int r){
bignum c;
c.len=r-l+1;
for(int i=0;i<c.len;i++)c.a[i]=a[l+i];
return c;
}
};
bignum s2n(char s[]){
bignum a;
a.clear();
int slen=strlen(s);
for(int i=0;i<slen;i++)a.a[slen-i-1]=s[i]-'0';
return a;
}
void print(bignum a){
int i;
for(i=a.len-1;i>=1;i--)if(a.a[i])break;
for(;i>=0;i--)putchar(a.a[i]+'0');
if(!a.len)putchar('0');
}
bignum max(bignum a,bignum b){
if(a.len!=b.len)return (a.len>b.len?a:b);
int len=a.len;
for(int i=0;i<len;i++)
if(a.a[i]!=b.a[i])return (a.a[i]>b.a[i]?a:b);
return a;
}
bignum operator *(bignum a,bignum b){
bignum c;
c.clear();
int len=(a.len>b.len?a.len:b.len);
for(int i=0;i<len;i++){
for(int j=0;j<=i;j++)c.a[i]+=a.a[j]*b.a[i-j];
if(c.a[i]>=10){
c.a[i+1]+=c.a[i]/10;
c.a[i]%=10;
}
}
while(c.a[len]>=10){
c.a[len+1]+=c.a[len]/10;
c.a[len++]%=10;
}
c.len=len+1;
return c;
}
int n,m;
char s[45];
bignum num;
bignum f[45];
int main(){
scanf("%d%d",&n,&m);
scanf("%s",&s);
num=s2n(s);
for(int i=1;i<=n;i++)f[i]=num.get(0,i-1);
for(int i=1;i<=m;i++)
for(int j=n;j>i;j--){
f[j]=s2n("0");
for(int k=i;k<j;k++)
f[j]=max(f[j],f[k]*num.get(k,j-1));
}
print(f[n]);
putchar('\n');
return 0;
}