#include<bits/stdc++.h>
#define N 50
#define K 10
#define L 506
using namespace std;
struct num{
int v[L];
int len;
num(){
len=0;
memset(v,0,sizeof(v));
}
};
int a[N];
num G[N][N];
num dp[N][K];
num g(int x,int y){
num cnt;
for(int i=y;i>=x;i--){
cnt.len++;
cnt.v[cnt.len-1]=a[i];
}
return cnt;
}
num maxn(num x,num y){
if(x.len>y.len) return x;
if(x.len<y.len) return y;
for(int i=x.len-1;i>=0;i++){
if(x.v[i]>y.v[i]) return x;
if(x.v[i]<y.v[i]) return y;
}
return x;
}
num mult(num x,num y){
num z;
memset(z.v,0,sizeof(z.v));
z.len=x.len+y.len;
for(int i=0;i<x.len;i++)
for(int j=0;j<y.len;j++)
z.v[i+j]+=x.v[i]*y.v[j];
for(int i=0;i<z.len;i++)
if(z.v[i]>9){
z.v[i+1]+=(z.v[i]/10);
z.v[i]%=10;
}
while(z.v[z.len-1]==0 && z.len!=1) z.len--;
return z;
}
int main(){
memset(a,0,sizeof(a));
int n,k;
num tmp;
string c;
scanf("%d%d",&n,&k);
cin>>c;
for(int i=0;i<c.length();i++)
a[i+1]=c[i]-'0';
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++)
G[i][j]=g(i,j);
for(int i=1;i<=n;i++) dp[i][0]=G[1][i];
for(int j=1;j<=k;j++)
for(int i=j+1;i<=n-k+j;i++)
for(int l=i-1;l>=j;l--)
dp[i][j]=maxn(mult(dp[l][j-1],G[l+1][i]),dp[i][j]);
for(int i=dp[n][k].len-1;i>=0;i--)
printf("%d",dp[n][k].v[i]);
return 0;
}