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}.
#include <bits/stdc++.h>
using namespace std;
int Get() {
  char c;
  while (c = getchar(), c < '0' || c > '9')
    ;
  int X = 0;
  while (c >= '0' && c <= '9') {
    X = X * 10 + c - 48;
    c = getchar();
  }
  return X;
}
int A[100000];
int Find(int Left, int Right, int X) {
  while (Left <= Right) {
    int Mid = (Left + Right) / 2;
    if (A[Mid] == X) return Mid;
    if (A[Mid] < X)
      Left = Mid + 1;
    else
      Right = Mid - 1;
  }
  return -1;
}
int main() {
  int N = Get(), K = Get();
  for (int i = 0; i < N; i++) A[i] = Get();
  sort(A, A + N);
  int Max = A[N - 1] / K;
  static bool Flag[100000];
  memset(Flag, 0, sizeof(Flag));
  int Ans = 0;
  for (int i = 0; i < N; i++) {
    if (Flag[i]) continue;
    int T = i, Len = 1;
    while (A[T] <= Max) {
      T = Find(T + 1, N - 1, A[T] * K);
      if (T == -1) break;
      Flag[T] = true;
      Len++;
    }
    Ans += (Len + 1) / 2;
  }
  printf("%d\n", Ans);
  return 0;
}
