#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;
}