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 JAVA):

Solution:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.StringTokenizer;

/**
 * @author Don Li
 */
public class RemaindersGame {

    static final int MAXN = 1000005;

    void solve() {
        int n = in.nextInt(), k = in.nextInt();
        int[] c = new int[n];
        for (int i = 0; i < n; i++) c[i] = in.nextInt();

        int[] f = new int[MAXN];
        int sqrt = (int) (Math.sqrt(MAXN) + 0.5);
        for (int i = 2; i < MAXN; i++) {
            if (f[i] == 0) {
                f[i] = i;
                for (int j = i * i; j < MAXN && i <= sqrt; j += i) f[j] = i;
            }
        }

        int[] cnt = new int[MAXN];
        for (int i = 0; i < n; i++) {
            while (c[i] > 1) {
                int p = f[c[i]], cp = 0;
                while (c[i] % p == 0) {
                    cp++;
                    c[i] /= p;
                }
                cnt[p] = Math.max(cnt[p], cp);
            }
        }

        boolean ok = false;
        while (k > 1) {
            int p = f[k], cp = 0;
            while (k % p == 0) {
                cp++;
                k /= p;
            }
            if (cp > cnt[p]) {
                ok = true;
                break;
            }
        }

        if(ok) out.println("NO");
        else out.println("YES");
    }


    public static void main(String[] args) {
        in = new FastScanner(new BufferedReader(new InputStreamReader(System.in)));
        out = new PrintWriter(System.out);
        new RemaindersGame().solve();
        out.close();
    }

    static FastScanner in;
    static PrintWriter out;

    static class FastScanner {
        BufferedReader in;
        StringTokenizer st;

        public FastScanner(BufferedReader in) {
            this.in = in;
        }

        public String nextToken() {
            while (st == null || !st.hasMoreTokens()) {
                try {
                    st = new StringTokenizer(in.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(nextToken());
        }

        public long nextLong() {
            return Long.parseLong(nextToken());
        }

        public double nextDouble() {
            return Double.parseDouble(nextToken());
        }
    }
}