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

public class Main {
    public static void main(String args[]) {new Main().run();}

    FastReader in = new FastReader();
    PrintWriter out = new PrintWriter(System.out);
    void run(){
        work();
        out.flush();
    }
    long mod=998244353;
    long gcd(long a,long b) {
        return a==0?b:gcd(b%a,a);
    }
    /**
     * a*x+b*y==gcd(a,b)
     * 变换为求解方程b*x'+(a%b)*y' => a*y'+b*(x'-[a/b]*y') => x=y',y=x'-[a/b]*y'
     */
    void exgcd(long a,long b,long[] A) {//f代表正负号
        if(b==0){
            A[0]=1;
            A[1]=0;
            return;
        }
        exgcd(b,a%b,A);
        long x=A[1];
        long y=A[0]-a/b*A[1];
        A[0]=x;
        A[1]=y;
    }

    /**
     * 求a*x+b*y=v的解，v必定是gcd(a,b)的倍数，返回最小正整数a*x
     * @param a a>0
     * @param b b>0
     * @param v v>0
     * @return 当返回-1时无解
     */
    long[] exgcdArr=new long[2];
    long exgcdVal(long a,long b ,long v){
        if(v==0){
            return 0;
        }
        long gcd=gcd(a,b);
        if(v%gcd!=0){
            return -1;
        }
        exgcd(a,b,exgcdArr);
        exgcdArr[0]=(exgcdArr[0]%b+b)%b;//找到最小的非负整数系数
        exgcdArr[0]=exgcdArr[0]*(v/gcd);
        exgcdArr[0]=(exgcdArr[0]%b+b)%b;
        return exgcdArr[0];
    }
    void work() {
        int n=ni(),k=ni();
        int[] A=nia(n);
        ArrayList<int[]> list=new ArrayList<>();
        boolean[] rec=new boolean[1000002];
        for(int i=2;i*i<=1000001;i++){
            if(!rec[i]){
                for(int j=i;i*j<=1000001;j++){
                    rec[i*j]=true;
                }
            }
        }
        for(int i=2;i<=1000001;i++){
            if(rec[i]) continue;
            int c=0;
            while(k%i==0){
                c++;
                k/=i;
            }
            if(c>=1){
                list.add(new int[]{i,c});
            }
        }
        for(int a:A){
            for(int[] l:list){
                int v=l[0];
                if(l[1]==0){
                    continue;
                }
                int c=0;
                while(a%v==0){
                    a/=v;
                    c++;
                }
                if(c>=l[1]){
                    l[1]=0;
                }
            }
        }
        boolean f=true;
        for(int[] l:list){
            if(l[1]>0){
                f=false;
            }
        }
        if(f){
            out.println("Yes");
        }else{
            out.println("No");
        }
    }


    //input
    @SuppressWarnings("unused")
    private ArrayList<Integer>[] ng(int n, int m) {
        ArrayList<Integer>[] graph=(ArrayList<Integer>[])new ArrayList[n];
        for(int i=0;i<n;i++) {
            graph[i]=new ArrayList<>();
        }
        for(int i=1;i<=m;i++) {
            int s=in.nextInt()-1,e=in.nextInt()-1;
            graph[s].add(e);
            graph[e].add(s);
        }
        return graph;
    }

    private ArrayList<long[]>[] ngw(int n, int m) {
        ArrayList<long[]>[] graph=(ArrayList<long[]>[])new ArrayList[n];
        for(int i=0;i<n;i++) {
            graph[i]=new ArrayList<>();
        }
        for(int i=1;i<=m;i++) {
            long s=in.nextLong()-1,e=in.nextLong()-1,w=in.nextLong();
            graph[(int)s].add(new long[] {e,w});
            graph[(int)e].add(new long[] {s,w});
        }
        return graph;
    }

    private int ni() {
        return in.nextInt();
    }

    private long nl() {
        return in.nextLong();
    }

    private String ns() {
        return in.next();
    }

    private long[] na(int n) {
        long[] A=new long[n];
        for(int i=0;i<n;i++) {
            A[i]=in.nextLong();
        }
        return A;
    }
    private int[] nia(int n) {
        int[] A=new int[n];
        for(int i=0;i<n;i++) {
            A[i]=in.nextInt();
        }
        return A;
    }
}

class FastReader
{
    BufferedReader br;
    StringTokenizer st;

    public FastReader()
    {
        br=new BufferedReader(new InputStreamReader(System.in));
    }


    public String next()
    {
        while(st==null || !st.hasMoreElements())//回车，空行情况
        {
            try {
                st = new StringTokenizer(br.readLine());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return st.nextToken();
    }

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

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