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}.
import java.io.*;
import java.util.*;
public class Solution{  
      
      static int mod=1000000007;
   
      public static void main(String[] args){ 
                  
               int n = intt();
               int k = intt();
               TreeMap<Integer,Integer> hm = new TreeMap<Integer,Integer>();
               HashSet<Integer> h = new HashSet<Integer>();
               int max =0;

                  for(int i=0;i<n;i++){

                        int num = intt();
                            if(hm.containsKey(num))
                               hm.put(num,hm.get(num)+1);
                            else
                               hm.put(num,1);
                           max = Math.max(max,num);
                   }
                     int ans=0;
                        if(k==1)
                            ans = hm.size();
                        else{
                   for(Map.Entry<Integer,Integer> entry : hm.entrySet()){

                            int key = entry.getKey();
                               if(!h.contains(key)){
                                     int a[] = new int[32];
                                     int x=0;
                                     long num = key;
                                   while(num<=max){ 

                                       if(hm.containsKey((int)num)){
                                           a[x]=hm.get((int)(num));                                   
                                           h.add((int)(num));
                                        }
                                       
                                       num = num*k;
                                       x++;
                                   }
                                int len=0;
                                for(int i=0;i<32;i++){
                                      if(a[i]!=0)
                                        len++;
                                     else{ ans = ans +(len+1)/2; len=0;}
                                }
                                   
                            }
                      }
                   }
                out.println(ans);
               out.flush();
    } 

         static FastReader sc=new FastReader();
         static PrintWriter out = new PrintWriter(System.out);
            static int intt(){
                       int x = sc.nextInt();
                       return(x);
                }
               static long longg(){
                          long x = sc.nextLong();
                           return(x);
                }
               static double doublee(){
                          double t = sc.nextDouble();
                           return(t);
                }
              static String str(){
                       String s = sc.next();
                         return(s);
                }
              static String strln(){

                        String s = sc.nextLine();
                           return(s);
              }
              static long pow(long a,long b){
                       long ans=1;
                      while(b>0){
                          if(b%2==1)
                              ans=(ans*a);
                              a=(a*a)%mod;
                              b=b/2;
                      }
                    return(ans);
                }
           
            static long LCM(long a,long b){
                         return ((a*b)/GCD(a,b));
               }
               static long GCD(long a,long b){
                          
                           if(b%a==0)
                              return(a);
                              return(GCD(b%a,a));
              }

                static long abs(long x,long y)
                   { return(Math.abs(x-y));}

              static long min(long x,long y){
                     return(Math.min(x,y));
                 }

              static long max(long a,long b){
                        return Math.max(a,b);
                  } 

              static long Fermat(long a,long p){
                           long b = p-2,ans=1;
                            while(b>0){
                                 if(b%2==1)
                                      ans=(ans*a)%p;
                                       a=(a*a)%p;
                                       b=b/2;
                              }
                           return(ans);
                   }
              static void Fact(long a[],long m){
                              a[0]=1;
                           for(int i=1;i<a.length;i++)
                                   a[i]=(i*a[i-1])%m;

                      }
              static void Fact_Inv(long a[],long F[],long m){

                                 int n =a.length;
                                     a[n-1]=Fermat(F[n-1],m);
                                 for(int i=n-2;i>=0;i--)
                                        a[i]=((i+1)*a[i+1])%m;
                        }
               /*static  long d, x, y;
              static void extendedEuclid(long A, long B) {
                            if(B == 0) {
                                  d = A;
                                  x = 1;
                                  y = 0;
                              }
                           else {
                                extendedEuclid(B, A%B);
                                 long temp = x;
                                  x = y;
                                 y = temp - (A/B)*y;
                            }
                     } */
                 /*static class pair implements Comparable<pair>{
                       int x,y;
                      pair(int a,int b){
                             x=a;
                             y=b;
                       }
                     public int compareTo(pair p1)
                           { return((p1.x-p1.y)-(this.x-this.y));}
          
                   public boolean equals(Object obj) {
                         if (this == obj)
                                return true;
                        if (obj == null)
                                return false;
                        if (getClass() != obj.getClass())
                                return false;
                         pair other = (pair) obj;
                          if (x != other.x)
                                  return false;
                          if (y != other.y)
                                  return false;
                            return true;
                      }
                      @Override
                 public int hashCode() {
                      return(x-y);
                   } 
          }   */
   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; 
        } 
    } 
}