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.*;
import java.math.*;
import static java.lang.Math.*;
import static java.lang.Integer.parseInt;
import static java.lang.Long.parseLong;
import static java.lang.Double.parseDouble;
import static java.lang.String.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
                                            //(new FileReader("input.in"));
        StringBuilder out = new StringBuilder();
        StringTokenizer tk;
        
        tk = new StringTokenizer(in.readLine());
        int n = parseInt(tk.nextToken()),k = parseInt(tk.nextToken());
        
        List<Long> factor = new ArrayList<>();
        for(long i=2; i*i<=k; i++) {
            if(k%i==0) {
                long t = 1;
                while(k%i==0) {
                    t *= i;
                    k /= i;
                }
                factor.add(t);
            }
        }
        
        if(k>1) factor.add((long)k);
        boolean [] r = new boolean[factor.size()];
        int cnt = factor.size();
        
        tk = new StringTokenizer(in.readLine());
        
        while(n-- > 0) {
            int c = parseInt(tk.nextToken());
           
            for(int i=0; i<factor.size(); i++) {
                if(c%factor.get(i)==0 && !r[i]) {
                    r[i] = true;
                    cnt--;
                }
            }
        }
        
        System.out.println(cnt==0 ? "Yes" : "No");
    }
}