太菜了一个小时还没写出来/kk
//2023/7/15
//别着急,先通读一遍题目
//别忘了开long long
//写完先看一遍怎么降复杂度
//要么开全局变量要么给定初值
//想想看,有什么情况需要特判
//看看数组开的够不够大
//std::ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN=1e6+10;
int num,ans;
struct node{
int id,val;
node(){id=0;val=0;}
}b[MAXN];
bool cmp(node aa,node bb){
return aa.val>bb.val;
}
int a[MAXN];
signed main()
{
std::ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int n,k;
cin>>n>>k;
for (int i=1;i<=n;i++){
cin>>a[i];
b[a[i]].id=a[i];
b[a[i]].val++;
}
sort(b+1,b+1+n,cmp);
if(k>=b[1].val){
cout<<"pigstd"<<endl;
return 0;
}
int mx=b[1].val;
for (int i=1;i<=n;i++){
if(b[i].id==0) break;
int bk=k;//当前可用的点个数
bool flag=1;
for (int j=1;j<i;j++){
//cout<<j<<endl;
if(b[i].val+k<b[j].val-bk||bk<0){
flag=0;
break;
}
else{
int x=(b[j].val-b[i].val-(k-bk))/2;
if(x<0) x=0;//不够大,需要拿出来补的点个数
bk-=x;
}
}
if(flag){
//cout<<b[i].id<<endl;
ans++;
}
else{
break;
}
}
cout<<ans<<endl;
return 0;
}