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.*;
import java.util.StringTokenizer;

public class SolutionC {
   BufferedReader in;
   StringTokenizer str;
   PrintWriter out;
   String SK;
   String next() throws IOException {
      while ((str == null) || (!str.hasMoreTokens())) {
      SK = in.readLine();
      if (SK == null)
      return null;
      str = new StringTokenizer(SK);
      }
      return str.nextToken();
   }
   int nextInt() throws IOException {
      return Integer.parseInt(next());
   }
   double nextDouble() throws IOException {
      return Double.parseDouble(next());
   }
   long nextLong() throws IOException {
      return Long.parseLong(next());
   }
   void run() throws IOException {
        in = new BufferedReader(new InputStreamReader(System.in));
        out = new PrintWriter(System.out);
        //in = new BufferedReader(new FileReader("input.txt"));
        //out = new PrintWriter("output.txt");
        solve();
        out.close();
   }
   public static void main(String[] args) throws IOException {
      new SolutionC().run();
   }

   void solve() throws IOException {
     int n=nextInt();
     long k=nextInt();
     long num[]=new long[n];
     for(int i=0;i<n;i++){
          num[i]=(long)nextInt();
     }
     if(k==1){
          out.println(n);
          return;
     }
     int ans=0;
     num=s(num);
     Arrays.sort(num);
     boolean  rem[]=new boolean[n];
     for(int i=n-1;i>=0;i--){

          if(rem[i])continue;
          if(num[i]%k!=0){
               ans++;
               continue;
          }
          long t=num[i]/k;
          int a=Arrays.binarySearch(num, t);
          if(a>=0){
               rem[a]=true;
          }
          ans++;
     }
    
        out.println(ans);
   }
    public static long[] s(long ar[]) {
     long v = 0;
     int a = 0;
     int b = 0;
     Random r = new Random();
     for (int i = 0; i < ar.length; i++) {
          a=r.nextInt(ar.length);
          b=r.nextInt(ar.length);
          v=ar[a];
          ar[a]=ar[b];
          ar[b]=v;
     }
      return ar;
     }

}
