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.*;

public class R688_D{
	static ArrayList<Integer> primes;
	static int[] kp;
	static int[] kr;
	static int total;
	public static void main(String[] args) {
		InputReader in = new InputReader(System.in);
        PrintWriter out = new PrintWriter(System.out);
        int n = in.nextInt();
        int k = in.nextInt();
        primes = new ArrayList<>();
        getPrimes(k+5);
        kp = new int[primes.size()];
        kr = new int[primes.size()];
        total = 0;
        factorize(k);
        boolean[] done = new boolean[total];
        Arrays.fill(done, false);
        for(int i=0;i<n;i++){
        	int c = in.nextInt();
        	for(int j=0;j<total;j++){
        		if(done[j]) continue;
        		int p = kp[j];
        		int r = kr[j];
//        		out.println(p + " " + r);
        		int count = 0;
        		while(c % p == 0){
        			count++;
        			c/=p;
        		}
        		if(count>=r){
        			done[j] = true;
        		}
        	}
        }
        boolean ans = true;
        for(int i=0;i<total;i++){
        	ans = ans & done[i];
        }
        if(ans){
        	out.println("YES");
        }else{
        	out.println("NO");
        }
        out.flush();
	}
	
	static void getPrimes(int up){
		int size = up + 1;
		int[] bp = new int[size];
		for(int i=2;i<size;i++){
			if(bp[i]==0){
				if(i <=  Math.sqrt(size)){;
					for(int j=i*i; j<size;j+=i){
						bp[j] = 1;
					}
				}
				primes.add(i);
			}
		}
	}
	
	static HashMap<Integer, Integer> factorize(int N){
		int pp = 0;
		HashMap<Integer, Integer> map = new HashMap<>();
		int p = primes.get(pp);
		while(p * p <= N){
			int count = 0;
			while(N % p == 0){
				N/=p;
				count++;
			}
			if(count>0){
				kp[total] = p;
				kr[total] = count;
				total++;
				map.put(p, count);
			}
			pp++;
			if(pp >= primes.size()) break;
			p = primes.get(pp);
		}
		if(N!=1){
			map.put(N, 1);
			kp[total] = N;
			kr[total] = 1;
			total++;
		}
		return map;
	}
	
	static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
            	try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }
        
        public long nextLong(){
        	return Long.parseLong(next());
        }
        
        public double nextDouble(){
        	return Double.parseDouble(next());
        }

    }
}