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 Main {
	static Scanner sc = new Scanner(System.in);
	static PrintWriter out = new PrintWriter(System.out);
	static HashMap<Long,Long> hm = new HashMap<>();
	
	public static void main(String[] args) throws Exception {
		int n = sc.nextInt();
		long k = sc.nextInt();
		long arr[] = new long[n];
		
		for(int i=0; i<n ;i++) {
			arr[i] = sc.nextInt();
			hm.put(arr[i],0L);
		}
		
		for(Long x : arr) {
			if(x%k == 0 && hm.containsKey(x/k)) {
				hm.put(x/k, hm.get(x/k)+1);
			}
			if(hm.containsKey(x*k)) {
				hm.put(x*k, hm.get(x*k) + 1);
			}	
		}
		
		PriorityQueue<Pair> pq = new PriorityQueue<>();
		HashSet<Long> ans = new HashSet<>();
		
		for(Map.Entry<Long,Long> mp : hm.entrySet()) {
			Pair p = new Pair(mp.getKey(),mp.getValue());
			pq.add(p);
		}
		
		while(!pq.isEmpty()) {
			Long x = pq.poll().key;
			if(ans.contains(x*k) || (x%k == 0 && ans.contains(x/k))) continue;
			ans.add(x);
		}
		
		out.println(ans.size());
		out.close();
	}
	static class Pair implements Comparable<Pair>{
		long key,val;
		
		public Pair(long key, long val) {
			this.key = key;
			this.val = val;
		}
		
		public int compareTo(Pair o) {
			if(val == o.val) return (int)(key - o.key);
			return (int) (val - o.val);
		}
		
	}
}

class Scanner {
	StringTokenizer st;
	BufferedReader br;

	public Scanner(InputStream system) {
		br = new BufferedReader(new InputStreamReader(system));
	}

	public Scanner(String file) throws Exception {
		br = new BufferedReader(new FileReader(file));
	}

	public String next() throws IOException {
		while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine());
		return st.nextToken();
	}

	public String nextLine() throws IOException {
		return br.readLine();
	}

	public int nextInt() throws IOException {
		return Integer.parseInt(next());
	}

	public double nextDouble() throws IOException {
		return Double.parseDouble(next());
	}

	public Long nextLong() throws IOException {
		return Long.parseLong(next());
	}
}
