Problem: Today Pari and Arya are playing a game called Remainders.

Pari chooses two positive integer x and k, and tells Arya k but not x. Arya have to find the value <image>. There are n ancient numbers c1, c2, ..., cn and Pari has to tell Arya <image> if Arya wants. Given k and the ancient values, tell us if Arya has a winning strategy independent of value of x or not. Formally, is it true that Arya can understand the value <image> for any positive integer x?

Note, that <image> means the remainder of x after dividing it by y.

Input

The first line of the input contains two integers n and k (1 ≤ n, k ≤ 1 000 000) — the number of ancient integers and value k that is chosen by Pari.

The second line contains n integers c1, c2, ..., cn (1 ≤ ci ≤ 1 000 000).

Output

Print "Yes" (without quotes) if Arya has a winning strategy independent of value of x, or "No" (without quotes) otherwise.

Examples

Input

4 5
2 3 5 12


Output

Yes


Input

2 7
2 3


Output

No

Note

In the first sample, Arya can understand <image> because 5 is one of the ancient numbers.

In the second sample, Arya can't be sure what <image> is. For example 1 and 7 have the same remainders after dividing by 2 and 3, but they differ in remainders after dividing by 7.

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
#pragma warning(disable : 4996)
using namespace std;
template <typename Type>
string ToString(const Type& val) {
  stringstream ss;
  ss << val;
  return ss.str();
}
int __gcd(int a, int b) {
  while (a != 0) {
    int __t = b % a;
    b = a;
    a = __t;
  }
  return b;
}
inline long long absl(long long x) { return (x < 0 ? -x : x); }
int gcdpl(int a, int b, int& x, int& y) {
  if (!a) {
    x = 0;
    y = 1;
    return b;
  }
  int x1, y1;
  int d = gcdpl(b % a, a, x1, y1);
  x = y1 - (b / a) * x1;
  y = x1;
  return d;
}
bool findSol(int a, int b, int c, int& x, int& y, int& g) {
  g = gcdpl(abs(a), abs(b), x, y);
  if (c % g) return false;
  x *= c / g * (a < 0 ? -1 : 1);
  y *= c / g * (b < 0 ? -1 : 1);
  return true;
}
int main() {
  cin.tie(NULL);
  cout.tie(NULL);
  cerr.tie(NULL);
  ios_base::sync_with_stdio(false);
  unsigned N;
  int k;
  cin >> N >> k;
  vector<int> p(1e6 + 1);
  for (unsigned i = 2; i < p.size(); i++)
    if (!p[i])
      for (unsigned j = i; j < p.size(); j += i) p[j] = i;
  vector<unsigned> cnt(1e6 + 1);
  for (unsigned i = 0; i < N; i++) {
    int v;
    cin >> v;
    while (v > 1) {
      int r = p[v];
      unsigned k = 0;
      while (v % r == 0) {
        v /= r;
        k++;
      }
      cnt[r] = max(cnt[r], k);
    }
  }
  while (k > 1) {
    if (!cnt[p[k]]) {
      cout << "No";
      return 0;
    }
    cnt[p[k]]--;
    k /= p[k];
  }
  cout << "Yes";
  return 0;
}