#include <bits/stdc++.h>
using namespace std;
void ga(int N, int *A) {
  for (int i(0); i < N; i++) scanf("%d", A + i);
}
int A[100005], N, K, B, E, f[100005];
long long S;
void dl(int I) { S -= --f[A[I]]; }
void add(int I) { S += f[A[I]]++; }
long long C(int b, int e) {
  while (E < e) add(++E);
  while (E > e) dl(E--);
  while (B < b) dl(B++);
  while (B > b) add(--B);
  return S;
}
struct CH {
  long long dp[2][100005];
  void gt(int d, int B, int E, int L, int R) {
    if (B > E) return;
    long long S = 1e18;
    int M = (B + E) / 2, J = E;
    for (int k(L); k < R + 1; k++)
      if (dp[(d - 1) & 1][k + 1] + C(M, k) < S)
        S = dp[(d - 1) & 1][k + 1] + C(M, k), J = k;
    dp[d & 1][M] = S;
    gt(d, B, M - 1, L, J), gt(d, M + 1, E, J, R);
  }
  long long go(int N, int K) {
    fill(*dp, *dp + N, 1e18), dp[0][N] = 0;
    for (int k(1); k < K + 1; k++) dp[k & 1][N] = 0, gt(k, 0, N - 1, 0, N - 1);
    return *dp[K & 1];
  }
} D;
int main(void) {
  scanf("%d%d", &N, &K), ga(N, A), f[*A] = 1, printf("%lld\n", D.go(N, K));
  return 0;
}
