#include <bits/stdc++.h>
using namespace std;
const int N = 35005;
int v[N], dp[N][55], l[N], seg[4 * N], lazy[4 * N];
void fix(int n, int l, int r) {
  seg[n] += lazy[n];
  if (l != r) {
    lazy[n * 2] += lazy[n];
    lazy[n * 2 + 1] += lazy[n];
  }
  lazy[n] = 0;
}
void update(int n, int l, int r, int s, int e, bool t, int k) {
  fix(n, l, r);
  if (r < s || l > e) return;
  if (l >= s && r <= e) {
    if (!t)
      seg[n] = dp[l - 1][k], lazy[n] = 0;
    else {
      seg[n]++;
      if (l != r) lazy[n * 2]++, lazy[n * 2 + 1]++;
    }
    return;
  }
  int mid = (l + r) / 2;
  update(n * 2, l, mid, s, e, t, k), update(n * 2 + 1, mid + 1, r, s, e, t, k);
  seg[n] = max(seg[n * 2], seg[n * 2 + 1]);
}
int get(int n, int l, int r, int s, int e) {
  fix(n, l, r);
  if (r < s || l > e) return 0;
  if (l >= s && r <= e) return seg[n];
  int mid = (l + r) / 2;
  return max(get(n * 2, l, mid, s, e), get(n * 2 + 1, mid + 1, r, s, e));
}
int main() {
  int n, K;
  scanf("%d%d", &n, &K);
  for (int i = 1; i <= n; i++) scanf("%d", &v[i]);
  for (int j = 0; j <= n; j++)
    for (int i = 0; i <= K; i++) dp[j][i] = -1e9;
  dp[0][0] = 0;
  for (int k = 1; k <= K; k++) {
    for (int j = 1; j <= n; j++) update(1, 1, n, j, j, 0, k - 1);
    memset(l, 0, sizeof l);
    for (int i = 1; i <= n; i++) {
      update(1, 1, n, l[v[i]] + 1, i, 1, -1);
      l[v[i]] = i;
      dp[i][k] = get(1, 1, n, 1, i);
    }
  }
  cout << dp[n][K] << endl;
  return 0;
}
