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.math.*;
import java.security.*;
import java.util.*;

public class Main {
    private static ArrayList<Integer> primes;
    private static ArrayList<Integer> target;
    private static int [] E;
    private static int [] res;

    private static void factor(int x) {
        primes = new ArrayList<>();
        target = new ArrayList<>();
        for (int i = 2; i*i <= x; i++) {
            if (x%i != 0) continue;
            int p = i, e = 0;
            while (x%p == 0) {
                x /= p;
                e++;
            }
            primes.add(p);
            target.add(e);
        }
        if (x > 1) {
            primes.add(x);
            target.add(1);
        }
        E = new int[primes.size()];
        res = new int[primes.size()];
    }
    public static void main(String[] args) throws NumberFormatException, IOException {
        IO io;
        try {
            io = new IO("in.in", null);
        }
        catch (Exception e) {
            io = new IO(null, null);
        }
        int n = io.getNextInt(), m = io.getNextInt();
        factor(m);
        TreeSet<Integer> C = new TreeSet<>();
        for (int i = 0; i < n; i++) {
            int c = io.getNextInt();
            for (int k = 0; k < primes.size();k ++){
                int p = primes.get(k);
                int e = 0;
                while (c%p == 0) {
                    c /= p;
                    e++;
                }
                res[k] = e;
            }

            for (int k = 0; k < primes.size(); k++) {
                int a = E[k], b = res[k];
                E[k] = Math.max(a, b);
            }
        }

        boolean y = true;
        for (int k = 0;k < primes.size(); k++)
            y &= E[k] >= target.get(k);

        if (y) io.println("Yes");
        else io.println("No");
        io.close();
    }
    private static long gcd(long a, long b) {
        while (b > 0) {
            long t = a%b;
            a = b;
            b = t;
        }
        return a;
    }
}



class pollardRho{
    private static BigInteger zero = new BigInteger("0");
    private static BigInteger one  = new BigInteger("1");
    private static BigInteger two  = new BigInteger("2");
    private static SecureRandom r = new SecureRandom();
    private static Queue<BigInteger> tasks = new LinkedList<>();
    private static ArrayList<BigInteger> primes = new ArrayList<>();

    public static long getBiggestPrime(long n) {
        long N = n;
        tasks.clear();
        primes.clear();
        tasks.add(BigInteger.valueOf(n));
        while (!tasks.isEmpty()){
            BigInteger x = tasks.poll();
            BigInteger P = one;
            for (BigInteger p : primes)
                if (P.compareTo(p) < 0)
                    P = p;
            for (BigInteger p : primes){
                while (x.remainder(p).equals(zero))
                    x = x.divide(p);
            }
//            System.err.println(x + " " + P);
            if(x.compareTo(P) <= 0) continue;
            factor(x);
        }
        BigInteger P = one;
        for (BigInteger p : primes)
            if (P.compareTo(p) < 0)
                P = p;
//        System.out.println(N + " " + tasks + " " + primes);
        return P.longValue();
    }

    private static void factor(BigInteger N) {
        if (N.compareTo(one) == 0) return;
        if (N.isProbablePrime(20)) {
            primes.add(N);
            return;
        }
        BigInteger d = rho(N);

        if (d.compareTo(one) != 0)
            tasks.add(d);
        N = N.divide(d);
        if (N.compareTo(one) != 0)
            tasks.add(N);
    }

    private static BigInteger rho(BigInteger N) {
        BigInteger d;
        BigInteger c  = new BigInteger(N.bitLength(), r);
        BigInteger p  = new BigInteger(N.bitLength(), r);
        BigInteger q = p;

        if (N.mod(two).compareTo(zero) == 0) return two;

        d = one;
        while(d.compareTo(one) == 0) {
            p  =  p.multiply(p).mod(N).add(c).mod(N);
            q = q.multiply(q).mod(N).add(c).mod(N);
            q = q.multiply(q).mod(N).add(c).mod(N);
            d = p.subtract(q).gcd(N);
        }
        return d;
    }
}
class IO{
    private BufferedReader br;
    private StringTokenizer st;
    private PrintWriter writer;
    private String inputFile,outputFile;

    public boolean hasMore() throws IOException{
        if(st != null && st.hasMoreTokens()) return true;
        if(br != null && br.ready()) return true;
        return false;
    }

    public String getNext() throws FileNotFoundException, IOException{
        while(st == null || !st.hasMoreTokens()) st = new StringTokenizer(br.readLine());
        return st.nextToken();
    }

    public String getNextLine() throws FileNotFoundException, IOException{
        return br.readLine().trim();
    }

    public int getNextInt() throws FileNotFoundException, IOException{
        return Integer.parseInt(getNext());
    }
    public long getNextLong() throws FileNotFoundException, IOException{
        return Long.parseLong(getNext());
    }

    public void print(double x,int num_digits) throws  IOException{
        writer.printf("%." + num_digits + "f" ,x);
    }
    public void println(double x,int num_digits) throws  IOException{
        writer.printf("%." + num_digits + "f\n" ,x);
    }
    public void print(Object o) throws  IOException{
        writer.print(o.toString());
    }

    public void println(Object o) throws  IOException{
        writer.println(o.toString());
    }
    public IO(String x,String y) throws FileNotFoundException, IOException{
        inputFile = x;
        outputFile = y;
        if(x != null) br = new BufferedReader(new FileReader(inputFile));
        else br = new BufferedReader(new InputStreamReader(System.in));
        if(y != null) writer = new PrintWriter(new BufferedWriter(new FileWriter(outputFile)));
        else writer = new PrintWriter(new OutputStreamWriter(System.out));
    }

    protected void close() throws IOException{
        br.close();
        writer.close();
    }
    public void outputArr(Object [] A) throws IOException{
        int L = A.length;
        for (int i = 0;i < L;i++) {
            if(i > 0) writer.print(" ");
            writer.print(A[i]);
        }
        writer.print("\n");
    }
}