#include <bits/stdc++.h>
using namespace std;
int a[100005], n, m, c[100005], w;
long long f[2][100005];
void solve(int l, int r, int L, int R, long long s) {
  if (l > r) return;
  int mid = (l + r) >> 1, x = 0;
  for (int i = (l), _en = (mid); i <= _en; i++) s += c[a[i]]++;
  for (int i = (L), _en = (min(R, mid)); i <= _en; i++) {
    s -= --c[a[i]];
    if (s + f[w ^ 1][i] < f[w][mid]) f[w][mid] = s + f[w ^ 1][i], x = i;
  }
  for (int i = (L), _en = (min(R, mid)); i <= _en; i++) s += c[a[i]]++;
  for (int i = (l), _en = (mid); i <= _en; i++) s -= --c[a[i]];
  solve(l, mid - 1, L, x, s);
  for (int i = (L), _en = (x - 1); i <= _en; i++) s -= --c[a[i]];
  for (int i = (l), _en = (mid); i <= _en; i++) s += c[a[i]]++;
  solve(mid + 1, r, x, R, s);
  for (int i = (L), _en = (x - 1); i <= _en; i++) c[a[i]]++;
  for (int i = (l), _en = (mid); i <= _en; i++) c[a[i]]--;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = (1), _en = (n); i <= _en; i++) {
    scanf("%d", &a[i]);
    f[1][i] = f[1][i - 1] + c[a[i]];
    c[a[i]]++;
  }
  for (int i = (2), _en = (m); i <= _en; i++) {
    memset(c, 0, sizeof c);
    for (int i = (1), _en = (n); i <= _en; i++) f[w][i] = 1e18;
    solve(1, n, 1, n, 0);
    w ^= 1;
  }
  printf("%lld\n", f[w ^ 1][n]);
  return 0;
}
