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:
/**
 * Created by Aminul on 10/9/2018.
 */

import java.io.*;
import java.util.*;
import static java.lang.Math.*;

public class CF687B {
    public static void main(String[] args)throws Exception {
        FastReader in = new FastReader(System.in);
        PrintWriter pw = new PrintWriter(System.out);
        
        int N = (int)1e6;
        lpf = lowest_prime_factors(N);
        int n = in.nextInt(), k = in.nextInt();
        Map<Integer, Integer> primeFactors = new HashMap<>();
        for (int i = 0; i < n; i++) {
            int x = in.nextInt();
            Map<Integer, Integer> map = prime_factorize_fast(x);
            for(int p : map.keySet()) {
                primeFactors.put(p, max(primeFactors.getOrDefault(p, 0), map.get(p)));
            }
        }
        Map<Integer, Integer> map = prime_factorize_fast(k);
        for(int p : map.keySet()) {
            primeFactors.put(p, primeFactors.getOrDefault(p, 0) - map.get(p));
        }
        boolean ok = true;
        for(int p : primeFactors.keySet()) {
            if(primeFactors.get(p) < 0) {
                ok = false; break;
            }
        }

        if(ok) pw.println("Yes");
        else pw.println("No");

        pw.close();
    }

    static Map<Integer, Integer> prime_factorize_fast(int n){
        Map<Integer, Integer> map = new HashMap<>();
        int k = n;
        for(int p = lpf[k]; k > 1; p = lpf[k]){
            int cnt = 0;
            while (k % p == 0){
                cnt++;
                k /= p;
            }
            map.put(p, cnt);
        }
        if(k > 1){
            map.put(k, 1);
        }

        return map;
    }

    static int lpf[];
    static int[] lowest_prime_factors(int n){
        lpf = new int[n+1];
        for(int i = 2; i <= n; i++){
            if(lpf[i] != 0) continue;
            for(int j = i; j <= n; j += i){
                if(lpf[j] == 0) lpf[j] = i;
            }
        }
        return lpf;
    }

    static void debug(Object...obj) {
        System.err.println(Arrays.deepToString(obj));
    }

    static class FastReader {
        InputStream is;
        private byte[] inbuf = new byte[1024];
        private int lenbuf = 0, ptrbuf = 0;

        public FastReader(InputStream is) {
            this.is = is;
        }

        public int readByte() {
            if (lenbuf == -1) throw new InputMismatchException();
            if (ptrbuf >= lenbuf) {
                ptrbuf = 0;
                try {
                    lenbuf = is.read(inbuf);
                } catch (IOException e) {
                    throw new InputMismatchException();
                }
                if (lenbuf <= 0) return -1;
            }
            return inbuf[ptrbuf++];
        }

        public boolean isSpaceChar(int c) {
            return !(c >= 33 && c <= 126);
        }
        private boolean isEndOfLine(int c) {
            return c == '\n' || c == '\r' || c == -1;
        }

        public int skip() {
            int b;
            while ((b = readByte()) != -1 && isSpaceChar(b)) ;
            return b;
        }

        public String next() {
            int b = skip();
            StringBuilder sb = new StringBuilder();
            while (!(isSpaceChar(b))) {
                sb.appendCodePoint(b);
                b = readByte();
            }
            return sb.toString();
        }



        public String nextLine() {
            int c = skip();
            StringBuilder sb = new StringBuilder();
            while (!isEndOfLine(c)){
                sb.appendCodePoint(c);
                c = readByte();
            }
            return sb.toString();
        }

        public int nextInt() {
            int num = 0, b;
            boolean minus = false;
            while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ;
            if (b == '-') {
                minus = true;
                b = readByte();
            }
            while (true) {
                if (b >= '0' && b <= '9') {
                    num = (num << 3) + (num << 1) + (b - '0');
                } else {
                    return minus ? -num : num;
                }
                b = readByte();
            }
        }

        public long nextLong() {
            long num = 0;
            int b;
            boolean minus = false;
            while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ;
            if (b == '-') {
                minus = true;
                b = readByte();
            }

            while (true) {
                if (b >= '0' && b <= '9') {
                    num = (num << 3) + (num << 1) + (b - '0');
                } else {
                    return minus ? -num : num;
                }
                b = readByte();
            }
        }

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

        public char[] next(int n) {
            char[] buf = new char[n];
            int b = skip(), p = 0;
            while (p < n && !(isSpaceChar(b))) {
                buf[p++] = (char) b;
                b = readByte();
            }
            return n == p ? buf : Arrays.copyOf(buf, p);
        }

        public char readChar() {
            return (char) skip();
        }
    }
}