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

public class Main {
 
    static final double eps = 1e-8;
    static int mod = 1000 * 1000 * 1000 + 9;
    static int n, k;
    static Set<Integer> set = new TreeSet<Integer>();
    
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        pw = new PrintWriter(System.out);
        try {

            n = nextInt();
            k = nextInt();
            if(k == 1)
                exit(n);
            int[] a = new int[n];
            for(int i = 0; i < n; i++)
                set.add( a[i] = nextInt() );
            
            int c = 0;
            Arrays.sort(a);
            for(int i = 0; i < n; i++)
            {
                if(set.contains(a[i]))
                {
                    c++;
                    if (set.contains(a[i] * k) && ( (long) a[i] * k < mod) )
                        set.remove(a[i] * k);
                }
            }
 
            pw.println(c);
        }
        finally {
            
            pw.close();
        }
    }


     
     
    


    static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
    static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer st ;
    static PrintWriter pw;
    static int nextInt() throws IOException {
        in.nextToken();
        return (int) in.nval;
    }
    static long nextLong() throws IOException {
        in.nextToken();
        return (long) in.nval;
    }
    static double nextDouble() throws IOException {
        in.nextToken();
        return in.nval;
    }
    static String next() throws IOException {
        in.nextToken();
        return in.sval;
    }
    static void outArray(int[] O) {
        for(int i = 0; i < O.length - 1; i++)
            pw.print(O[i] + " ");
        pw.println(O[O.length - 1]);
    }
    static void exit(Object arg)
    {
        pw.println(arg);
        pw.flush();
        System.exit(0);
    }
}