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 D {
	
	static int[] p = new int[100000];
	static int np;
	static boolean[] a = new boolean[1000000];
	static void sieve() {	
		for (int i = 2; i < 1000; i++) {
			if (!a[i]) {				
				for (int j = i*i; j < 1000000; j += i) {
					a[j] = true;
				}
			}
		}
		for (int i = 2; i < 1000000; i++) {
			if (!a[i]) {
				p[np++] = i;
			}
		}		
	}

	public static void main (String[] args) throws IOException {
		FastScanner sc = new FastScanner(System.in);
		PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out));
		
		int n = sc.nextInt();
		int k = sc.nextInt();
		if (k == 1) {
			out.println("Yes");
		} else {
			sieve();
			ArrayList<Integer> d = new ArrayList<Integer>();
			ArrayList<Integer> dc = new ArrayList<Integer>();
			for (int i = 0; i < np; i++) {
				int w = 0;
				while ((k % p[i]) == 0) {
					w++;
					k /= p[i];
				}
				if (w > 0) {
					d.add(p[i]);
					dc.add(w);	
				}				
				if (k == 1) break;
			}				
			ArrayList<Boolean> ok = new ArrayList<Boolean>(d.size());
			for (int i = 0; i < d.size(); i++) {
				ok.add(false);
			}
			for (int i = 0; i < n; i++) {
				int j = sc.nextInt();			
				for (int l = 0; l < d.size(); l++) {
					if (!ok.get(l)) {
						int w = 0;
						int dd = d.get(l);
						while (j % dd == 0) {
							w++;
							j /= dd;
						}
						if (w >= dc.get(l)) ok.set(l, true);
					}
				}
			}		
			boolean z = true;
			for (Boolean b : ok) {
				if (!b) {
					z = false;
					break;
				}
			}
			out.println(z?"Yes":"No");
		}		
		out.close();
	}

	static class FastScanner {
		BufferedReader reader;
		StringTokenizer tokenizer;
		
		public FastScanner(InputStream inp) {
			reader = new BufferedReader(new InputStreamReader(inp));
			tokenizer = new StringTokenizer("");
		}
		
		String next() throws IOException {
			while(!tokenizer.hasMoreTokens()) tokenizer = new StringTokenizer(reader.readLine());
			return tokenizer.nextToken();
		}
		
		int nextInt() throws IOException {
			return Integer.parseInt(next());
		}
	}

}