A k-multiple free set is a set of integers where there is no pair of integers where one is equal to another integer multiplied by k. That is, there are no two integers x and y (x < y) from the set, such that y = x·k.

You're given a set of n distinct positive integers. Your task is to find the size of it's largest k-multiple free subset.

Input

The first line of the input contains two integers n and k (1 ≤ n ≤ 105, 1 ≤ k ≤ 109). The next line contains a list of n distinct positive integers a1, a2, ..., an (1 ≤ ai ≤ 109).

All the numbers in the lines are separated by single spaces.

Output

On the only line of the output print the size of the largest k-multiple free subset of {a1, a2, ..., an}.

Examples

Input

6 2
2 3 6 5 4 10


Output

3

Note

In the sample input one of the possible maximum 2-multiple free subsets is {4, 5, 6}.
//Number theory -1
//Graph -1,2,3
//DSU -1,
//Div 2C @unsolved-44,45,47,50,53,54,55
//graph @unsolved-540C,4D,295B,526B,500B,682C,506D,103B,329B,161D;
//complete search --NA;
//binary search-1

import java.util.*;
import java.io.*;
public class CF274A
{    //*****************************************    VARIABLE DECLERATION SECTION   ********************************************************************;
         //Integer ArrayList Math TreeMap TreeSet
         // System.out.println
         static long[] arr;

    //*****************************************    VARIABLE DECLERATION ENDS   ********************************************************************;

    //************************************************   MAIN FUNCTION  *************************************************************************; 
    public static void main(String[] args) 
    {   
         FastReader scan=new FastReader();
         int n=scan.nextInt();long k=scan.nextLong();
         arr=new long[n];
         boolean[] visited=new boolean[n];
         for(int i=0;i<n;i++)arr[i]=scan.nextLong();
         Arrays.sort(arr);
         long ans=0l;
         for(int i=0;i<n;i++)
         {   
            if(visited[i])continue;
            //System.out.println(arr[i]);
            visited[i]=true;
            int x=binary(k*arr[i],n-1);
            if(x>=0){visited[x]=true;}
            ans++;
         }
         System.out.println(ans);

    }
    //***********************************************  MAIN FUNCTION ENDS   *********************************************************************;

    //**********************************************   AUXILIARY FUNCTIONS  **********************************************************************;
    static int binary(long x,int n)
    {     int l=0,r=n;
          if(arr[l]==x)return 0;
          if(arr[r]==x)return n;
           int mid=0;
           while(l<r)
           { mid=(l+r)/2;
             if(arr[mid]==x)return mid;
             if(arr[mid]>x)r=mid;
             else l=mid+1;
           }
           return -1;

    }
    //**********************************************   AUXILIARY FUNCTIONS  ENDS  **********************************************************************;

    //**********************************************   INPUT FUNCTIONS     ******************************************************************************;
       static class FastReader
    {   BufferedReader br;   StringTokenizer st;
        public FastReader()
        {  br = new BufferedReader(new  InputStreamReader(System.in)); }
        String next()
        {    while (st == null || !st.hasMoreElements())
            {    try
                {  st = new StringTokenizer(br.readLine()); }
                catch (IOException  e)
                {  e.printStackTrace(); }
            }
            return st.nextToken();
        }
        int nextInt()
        {   return Integer.parseInt(next()); }
        long nextLong()
        {   return Long.parseLong(next()); }
        double nextDouble()
        {  return Double.parseDouble(next()); }
        String nextLine()
        { String str = "";
            try
            {     str = br.readLine(); }
            catch (IOException e)
            {     e.printStackTrace(); }
            return str;
        }
    }
    //**********************************************   INPUT FUNCTIONS     ******************************************************************************;
}