//upper_bound(a+i,a+j+1,p) 返回a[i]~a[j]中第一个超过p的数的指针
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
using namespace std;
long long a[100005];
int N,p,ans=1;
int main()
{
freopen("in.txt","r",stdin);
scanf("%d %d",&N,&p);
for(int i=0;i<N;i++)
{
scanf("%lld",&a[i]);
}
sort(a,a+N);
for(int i=0;i<N;i++)
{
//upper_bound(a+i,a+j+1,p) 返回a[i]~a[j]中第一个超过p的数的指针
int t=upper_bound(a+i+1,a+N,a[i]*p)-&a[i];
ans=max(ans,t);
}
printf("%d",ans);
return 0;
}
//upper_bound(a+i,a+j+1,p) 返回a[i]~a[j]中第一个超过p的数的指针