#include<bits/stdc++.h>
using namespace std;
int m,n,juli[501][501],canju,answertot,onetot;
int search(int town,int school)
{
int onettot=0;
if(town==0) return 0; //边界
if(town<=school) return 0;//边界
if(school==1)//边界
{
for(int i=1;i<town/2;i++)//当学校是中间时最短
{
onetot+=juli[i][town/2];
}
for(int i=town/2;i<=town;i++)
{
onetot+=juli[town/2][i];
}
return onetot;
}
if(school==0)//边界
{
return juli[1][town];
}
return min(search(town-1,school)+juli[town-1][town],search(town-1,school-1));//新增一个点
//DP考虑在town的位置建或不建学校 建: search(town-1,school-1),不建 search(town-1,school)+juli[town-1][town]
}
void init()
{
int i;
cin>>m>>n;
for(int i=1;i<=m-1;i++)
{
cin>>canju;
if(i==m-1)//成一个环
{
juli[i][1]=juli[1][i]=canju;
}
else
juli[i][i+1]=juli[i+1][i]=canju;
for(int j=1;j<=i;j++)
{
if(i==j)
{
juli[j][i]=juli[i][j]=0;//自己到自己为0
}
else
juli[j][i]=juli[i][j]=juli[j][i-1]+canju;//所有的点之间的距离
}
}
}
int main()
{
memset(juli,0x3f3f,sizeof(juli)); //town之间距离无限大
init();//输入
answertot=search(m,n);//solve部分;
cout<<answertot;
return 0;
}