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.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Random;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeSet;

public class Main {

    //http://www.codeforces.com/contest/275/problem/C

    public static void main(String[] args) throws NumberFormatException, IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int num = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());

        st = new StringTokenizer(br.readLine(), " ");

        if (k == 1) System.out.println(num); 
        else {
            Set<Integer> set = new TreeSet<Integer>();
            Set<Integer> bad = new TreeSet<Integer>();
            int sel;
            
            int[] arr = new int[num];
            for (int i = 0; i < num; i++) {
                arr[i] = Integer.parseInt((st.nextToken()));
            }

            shuffle(arr);
            Arrays.sort(arr);

            for (int i = 0; i < num; i++) {
                sel = arr[i];
                if (sel % k != 0) {
                    set.add(sel);
                    bad.add(sel * k);
                }
                if (!bad.contains(sel) && !set.contains(sel / k)) {
                    bad.add(sel * k);
                    set.add(sel);
                }
            }

            System.out.println(set.size()); 
        }
    }

    public static void shuffle(int[] arr) {
        Random rand = new Random();
        for (int i = arr.length - 1; i >= 0; --i) {
            int pos = rand.nextInt(i + 1);
            int aux = arr[i];
            arr[i] = arr[pos];
            arr[pos] = aux;
        }
    }
}