#include<bits/stdc++.h>
#define x first
#define y second
#define inf 0x3f3f3f3f
#define lowbit(x) ((x)&(-x))
#define lson node<<1
#define rson node<<1|1
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pii;
const int maxn=1e6+34;
ll idx,tot;
ll MOD=1e9+7;
//vector<int>G[maxn];
ll a[maxn],vis[maxn],num[maxn];
char s[20];
int check(ll ans){
ll sum=0;
for(int i=1;i<=idx;i++){
if(num[i]>ans)sum+=(num[i]-ans);
}
return sum<=ans;
}
int ask_inf(int n){
ll l=1,r=n,ans=n+1;
while(l<=r){
ll mid=(l+r)/2;
if(check(mid))r=mid-1,ans=mid;
else l=mid+1;
}
return ans;
}
int ask(int id,ll m){
ll need=0,had=num[id]+m;
for(int i=idx;i>id;i--){
if(num[i]>had)need+=num[i]-had;
}
return need<=had;
}
void ask_id(ll m){
ll l=1,r=idx,ans=idx+1;
while(l<=r){
int mid=(l+r)/2;
if(ask(mid,m))r=mid-1,ans=mid;
else l=mid+1;
}
printf("%lld\n",idx-ans+1);
}
void work(){
int n;
ll m,u,v,x,k,y;
scanf("%d%lld",&n,&m);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
vis[a[i]]++;
}
sort(a+1,a+1+n);
for(int i=1;i<=n;i++){
if(a[i]==a[i-1])continue;
num[++idx]=vis[a[i]];
}
if(m>=ask_inf(n)){
printf("pigstd\n");return;
}
sort(num+1,num+idx+1);
ask_id(m);
}
int main()
{
int t=1;
// scanf("%d",&t);
while(t--)
work();
return 0;
}