#include <algorithm>
#include <cstring>
#include <iostream>
typedef long long LL;
LL N, K, DP[3005][3005], Input[3005], Arr[3005];
LL Val(LL L, LL R) {
return (R - L - 1) * (R - L) / 2 * std::max(Arr[L], Arr[R]) + Arr[R] * Arr[R];
}
LL Pos = 0;
int main() {
std::cin >> N >> K;
for (int i = 0; i < N; i++) {
std::cin >> Input[i];
if (Input[i] == 0) Pos = i;
}
for (int i = 0; i < N; i++) {
Arr[i + 1] = Input[(i + Pos) % N];
}
std::memset(DP, 0x3F, sizeof DP);
DP[1][1] = 0;
for (LL R = 1; R <= N; R++) {
for (LL Num = 2; Num <= std::min(R, K); Num++) {
for (LL L = 1; L <= R; L++) {
DP[R][Num] = std::min(DP[R][Num], DP[L][Num - 1] + Val(L, R));
if (Num == K) {
DP[R][Num] = std::min(DP[R][Num], DP[L][Num] + Val(L, R));
}
}
}
}
LL Ans = 0x3F3F3F3F3F3F3F3F;
for (int Id = 1; Id <= N; Id++) {
Ans = std::min(Ans, DP[Id][K] + Val(Id, N + 1));
}
std::cout << Ans << '\n';
return 0;
}