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 {
	BufferedReader in;
	PrintWriter out;
	StringTokenizer str;

	private String next() throws Exception {
		if (str == null || !str.hasMoreElements())
			str = new StringTokenizer(in.readLine());
		return str.nextToken();
	}

	private int nextInt() throws Exception {
		return Integer.parseInt(next());
	}

	final int MAXN = 1001000;
	int []lp, div;
	int[] primes;

	public void run() throws Exception {
		in = new BufferedReader(new InputStreamReader(System.in));
		out = new PrintWriter(System.out);
		int n = nextInt(), k = nextInt();
		if (k == 1) {
			out.println("Yes");
			out.close();
			return;
		}
		int []c = new int[n];
		for(int i = 0; i < n; ++i) {
			c[i] = nextInt();
			// if (c[i] == k) {
			// 	out.println("Yes");
			// 	out.close();
			// 	return;
			// }
		}

		primes = new int[80000];
		lp = new int[MAXN + 1];
		int size = 0;

		for(int i = 2; i <= MAXN; ++i) {
			if (lp[i] == 0) {
				lp[i] = i;
				primes[size++] = i;
			}
			for(int j = 0; j < size && primes[j] <= lp[i] && 1L * i * primes[j] <= MAXN; ++j) {
				lp[i * primes[j]] = primes[j];
			}
		}

		div = new int[MAXN + 1];
		for(int i = 0; i < n; ++i) {
			int cur = c[i], prevDiv = -1, cnt = 0;
			while(cur > 1) {
				int divisor = lp[cur];
				if (prevDiv != divisor) {
					prevDiv = divisor;
					cnt = 1;
				} else {
					++cnt;
				}

				if (div[divisor] < cnt) div[divisor] = cnt;
				cur /= divisor;
			}
		}

		long mod = 1;
		for(int i = 2; i <= MAXN; ++i) {
			// if (div[i] > 0) {
			// 	out.println(i + " " + div[i]);
			// }
			for(int j = 0; j < div[i]; ++j) {
				mod *= i;
				mod %= k;
			}
		}

		mod = (mod + 1) % k;
		// System.out.println("mod = " + mod);
		
		if (mod != 1) {
			out.println("No");
		} else {
			out.println("Yes");
		}
		
		out.close();
	}

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