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.lang.reflect.Array;
import java.util.*;
public class kMultipleFreeSet {
	public static int[] radixSort(int[] f)
	{
		int[] to = new int[f.length];
		{
			int[] b = new int[65537];
			for(int i = 0;i < f.length;i++)b[1+(f[i]&0xffff)]++;
			for(int i = 1;i <= 65536;i++)b[i]+=b[i-1];
			for(int i = 0;i < f.length;i++)to[b[f[i]&0xffff]++] = f[i];
			int[] d = f; f = to;to = d;
		}
		{
			int[] b = new int[65537];
			for(int i = 0;i < f.length;i++)b[1+(f[i]>>>16)]++;
			for(int i = 1;i <= 65536;i++)b[i]+=b[i-1];
			for(int i = 0;i < f.length;i++)to[b[f[i]>>>16]++] = f[i];
			int[] d = f; f = to;to = d;
		}
		return f;
	}
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		long k=sc.nextInt();
		int kInt=(int)k;
		int[] a=new int[n];
		for (int i = 0; i < n; i++) {
			a[i]=sc.nextInt();
		}
		a=radixSort(a); 
		int subCnt=0;
		Map<Integer,Integer> map=new HashMap<Integer, Integer>();
		//TreeSet<Integer> ts=new TreeSet<Integer>();
		for (int i = 0; i < n; i++) {
			
			if( map.containsKey(a[i])) continue;
			long toDel= (k)*a[i];
			subCnt++;
			if(toDel>1000000000) continue;
			map.put(kInt*a[i], 1);			
		}
		System.out.println(subCnt);
		
//		boolean[] isDel=new boolean[n];
//		int subCnt=0;
//		for (int i = 0; i < n; i++) {
//			if(isDel[i]) continue;
//			long toDel= ((long)k)*a[i];
//			subCnt++;
//			if(toDel>1000000000) continue; 
//		    int toDelId= Arrays.binarySearch(a, (int)toDel);
//		    
//			if(toDelId>=0)			
//				isDel[toDelId]=true;
//		}
//
//		System.out.println(subCnt);
	}

}
