#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int mod = 998244353;
char a[105];
int num[105][105];
int n,m;
int V(int m,int n){
if(m==0){
return num[1][n];
}
else if(n-1<m){
return inf;
}
else{
int t=inf;
for(int i=m;i<=n-1;i++){//长度起码要大于m-1
t=min(t,v(m-1,i)+num[i+1][n]);
}
return t;
}
}
int main(){
while(~scanf("%d%d",&n,&m)){
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<=n;i++){
num[i][i]=a[i];//个位数字
for(int j=i+1;j<=n;j++){
num[i][j]=num[i][j-1]*10+a[i];//多位数字
}
}
cout<<V(m,n)<<endl;
}
return 0;
}
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int mod = 998244353;
char a[105];
int num[105][105];
int n,m;
int dp[105][105];
//int V(int m,int n){
// if(m==0){
// return num[1][n];
// }
// else if(n-1<m){
// return inf;
// }
// else{
// int t=inf;
// for(int i=m;i<=n-1;i++){//长度起码要大于m-1
// t=min(t,v(m-1,i)+num[i+1][n]);
// }
// return t;
// }
//}
int main(){
while(~scanf("%d%d",&n,&m)){
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<=n;i++){
num[i][i]=a[i];//个位数字
for(int j=i+1;j<=n;j++){
num[i][j]=num[i][j-1]*10+a[i];//多位数字
}
}
memset(dp,0x3f,sizeof(dp));
for(int i=1;i<=n;i++){
dp[0][i]=num[1][i];//无加号时
}
for(int i=1;i<=m;i++){//加号的数量
for(int j=i;j<=n;j++){//数字的长度
for(int k=i;k<=j;k++){//在任意的空隙中插入加号
dp[i][j]=min(dp[i][j],dp[i-1][k]+num[k+1][j]);
}
}
}
cout<<dp[m][n]<<endl;
}
return 0;
}