#include <iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define ll long long
using namespace std;
const int maxn=1010;
const int inf=1e9+7;
ll cost[maxn][maxn],dp[maxn][maxn],s[maxn][maxn];
void DP(int n,int m)
{
for(int i=0;i<n;i++)
{
dp[0][i]=cost[0][i];
s[0][i]=0;
s[i][n]=n-2;
}
for(int i=1;i<=m;i++)
for(int j=n-1;j>=0;j--)
{
dp[i][j]=inf;
for(int k=s[i-1][j];k<=s[i][j+1];k++)
{
if(dp[i][j]>dp[i-1][k]+cost[k+1][j])
{
dp[i][j]=dp[i-1][k]+cost[k+1][j];
s[i][j]=k;
}
}
}
}
int main()
{
int n,m;
ll sum[maxn],tem[maxn];
while(~scanf("%d%d",&n,&m)&&n&&m)
{
memset(cost,0,sizeof(cost));
memset(dp,0,sizeof(dp));
memset(s,0,sizeof(s));
for(int i=0;i<n;i++)
{
scanf("%I64d",&tem[i]);
if(i==0)
sum[i]=tem[i];
else
sum[i]=sum[i-1]+tem[i];
}
for(int i=1;i<n;i++)
cost[0][i]=cost[0][i-1]+sum[i-1]*tem[i];
for(int i=1;i<n;i++)
for(int j=i+1;j<n;j++)
cost[i][j]=cost[i][j-1]+(sum[j-1]-sum[i-1])*tem[j];
DP(n,m);
printf("%lld\n",dp[m][n-1]);
}
}