rt
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define FOR(qw,we,er) for(int qw=we;qw<=er;++qw)
const short wrnmb=45,fuck=8;
struct gjd
{
int q[50],len;
bool operator >(gjd qw)
{
if(len!=qw.len)return len>qw.len;
else
{
FOR(i,-len,-1)
{
if(q[-i]!=qw.q[-i])return q[-i]>qw.q[-i];
}
return 114514;
}
}
}f[wrnmb][fuck];
int n,k,a[114][114];
gjd int2gjd(int qw)
{
gjd temp1;
temp1.len=0;
while(qw)
{
temp1.q[++temp1.len]=qw%10;
qw/=10;
}
return temp1;
}
gjd clean(gjd qwer)
{
while(qwer.q[qwer.len]==0)qwer.len--;
return qwer;
}
gjd operator *(gjd qw,gjd we)
{
if(qw.len==0&&we.len==0)return qw;
gjd temp;
temp.len=qw.len+we.len-1;
temp.q[temp.len+1]=0;
int jw=0;
FOR(i,1,qw.len)
{
jw=0;
FOR(j,1,we.len)
{
temp.q[i+j-1]=qw.q[i]*we.q[j]+jw;
if(temp.q[i+j-1]>=10)jw=temp.q[i+j-1]/10,temp.q[i+j-1]%=10;
}
if(jw>0)temp.q[i+we.len]=jw;
}
if(temp.q[temp.len+1]!=0)temp.len++;
clean(temp);
return temp;
}
gjd operator *(gjd qw,int we)
{
gjd temp1=int2gjd(we);
temp1=qw*temp1;
return temp1;
}
int print(gjd qwer)
{
FOR(i,-qwer.len,-1)putchar(qwer.q[-i]+'0');
return 114514;
}
bool operator <(gjd qw,gjd we)
{
return !(qw>we);
}
signed main()
{
scanf("%lld%lld",&n,&k);
FOR(i,1,n)
{
scanf("%1lld",&a[i][i]);
}
FOR(i,2,n)
FOR(j,1,n-i+1)
{
a[j][j+i-1]=a[j][j+i-2]*10+a[j+i-1][j+i-1];
}
FOR(i,1,n)f[i][0]=int2gjd(a[1][i]);
FOR(i,1,n-1)FOR(j,0,k-1)FOR(l,1,n-i)
{
f[i+l][j+1]=max(f[i+l][j+1],f[i][j]*a[i+1][i+l]);
clean(f[i+l][j+1]);
}
clean(f[n][k]);
print(f[n][k]);
return 0;
}