#include<bits/stdc++.h>
using namespace std;
main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n,k;
cin>>n>>k;
vector<int> data(n);
for(int& i:data){
cin>>i;
}
vector<long long> dp(n);
unordered_map<long long,int> same;
int ind=0;
dp[0] = 1;
same[dp[0]]=0;
for(int i=1;i<n;i++){
auto iter = same.find(data[i]);
if(iter==same.end()){
same[data[i]]=i;
dp[i] = dp[i-1]+1;
}
else{
int f = iter->second;
for(;ind<=f;ind++){
same.erase(data[ind]);
}
same[data[i]]=i;
dp[i] = same.size();
}
}
vector<vector<long long>> DP(k,vector<long long>(n));
for(int i=0;i<k;i++){
DP[i][0] = 1;
}
long long M=0;
for(int i=0;i<n;i++){
if(dp[i]>M){
M=dp[i];
}
DP[0][i] = M;
}
for(int i=1;i<k;i++){
for(int j=1;j<n;j++){
long long choose = dp[j];
if(j-dp[j]>=0){
choose+=DP[i-1][j-dp[j]];
}
long long not_choose=DP[i][j-1];
DP[i][j] = max(choose,not_choose);
}
}
cout<<DP[k-1][n-1];
return 0;
}