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.*;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;

/**
 * _687B
 * O((10^6)*ln(ln(10^6)) + n*log(max(ci))) time
 * O(10^6 + log(max(ci))) space
 *
 * @author artyom
 */
public class _687B implements Runnable {
    private BufferedReader in;
    private PrintStream out;
    private StringTokenizer tok;
    private static final int MAX_PRIME_NUMBER = 1_000_000;
    private static final int[] comp = new int[MAX_PRIME_NUMBER + 1];

    static {
        for (int i = 2, n = (int) Math.sqrt(MAX_PRIME_NUMBER); i <= n; i++) {
            if (comp[i] == 0) {
                for (int j = i * i; j <= MAX_PRIME_NUMBER; j += i) {
                    comp[j] = i;
                }
            }
        }
    }

    private void solve() throws IOException {
        int n = nextInt(), k = nextInt();
        if (k == 1) {
            out.print("Yes");
            return;
        }
        int[] pows = new int[MAX_PRIME_NUMBER + 1];
        Map<Integer, Integer> cnt = new HashMap<>();
        for (int i = 0; i < n; i++) {
            int v = nextInt();
            while (comp[v] != 0) {
                cnt.merge(comp[v], 1, Integer::sum);
                v /= comp[v];
            }
            cnt.merge(v, 1, Integer::sum);
            for (Map.Entry<Integer, Integer> entry : cnt.entrySet()) {
                pows[entry.getKey()] = Math.max(pows[entry.getKey()], entry.getValue());
            }
            cnt.clear();
        }
        while (comp[k] != 0) {
            if (pows[comp[k]] == 0) {
                out.print("No");
                return;
            }
            pows[comp[k]]--;
            k /= comp[k];
        }
        out.print(pows[k] == 0 ? "No" : "Yes");
    }

    //--------------------------------------------------------------
    public static void main(String[] args) {
        new _687B().run();
    }

    @Override
    public void run() {
        try {
            in = new BufferedReader(new InputStreamReader(System.in));
            out = System.out;
            tok = null;
            solve();
            in.close();
        } catch (IOException e) {
            System.exit(0);
        }
    }

    private String nextToken() throws IOException {
        while (tok == null || !tok.hasMoreTokens()) {
            tok = new StringTokenizer(in.readLine());
        }
        return tok.nextToken();
    }

    private int nextInt() throws IOException {
        return Integer.parseInt(nextToken());
    }
}