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:
//package GeneralProblems;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.StringTokenizer;

public class RemaindersGame {
	static ArrayList<Integer>primes;
	static boolean prime[];
	static int [] count;
	static void gen() {
		prime = new boolean[(int)1e6+10];
		primes =new ArrayList<Integer>();
		count = new int[prime.length];
		Arrays.fill(prime,true);
		for (int i = 2; i < Math.sqrt(prime.length); i++) {
			if(prime[i])
				for (int j = i*i; j < prime.length; j+=i) {
					prime[j]=false;
				}
		}
		for (int i = 2; i < prime.length; i++) {
			if(prime[i])
				primes.add(i);
		}
	}
	static void primeFactors(int n) {
		int idx = 0, p= primes.get(idx);
		
		while(p*p <=n) {
			int counter = 0;
			while(n%p==0) {
				n/=p;
				counter++;
			}
			count[p]=Math.max(count[p], counter);
			p= primes.get(++idx);
		}
		if(n!=1)
			count[n]=Math.max(count[n], 1);
	}
	static int pow(int a, int e) {
		int res = 1;
		while(e >0)
		{
			if((e & 1)==1)
				res *=a;
			a*=a;
			e>>=1;
		}
		return res;
	}
	public static void main(String[] args) throws IOException{
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st= new StringTokenizer(in.readLine());
		int n = Integer.parseInt(st.nextToken());
		int k = Integer.parseInt(st.nextToken());
		int [] arr = new int[n];
		st = new StringTokenizer(in.readLine());
		for (int i = 0; i < arr.length; i++) {
			arr[i]=Integer.parseInt(st.nextToken());
		}
		
//		gen();
//		for (int i = 0; i < arr.length; i++) {
//			primeFactors(arr[i]);
//		}
//		long ans = 1;
//		for (int i = 2; i < count.length; i++) {
//			if(count[i]==0)
//				continue;
//			int cur =pow(i,count[i]);
////			System.out.println(cur+" "+i+" "+count[i]);
//			ans=((ans%k)*cur%k)%k;
//		}
//		System.out.println(ans);
		long ans =arr[0];
		for (int i = 1; i < arr.length; i++) {
			ans = lcm(ans,arr[i] )%k;
		}
		if(ans%k==0)
			System.out.println("Yes");
		else
			System.out.println("No");
		
}
	static long gcd(long a, long b) {
		if(b==0)
			return a;
		return gcd(b, a%b);
	}
	static long lcm(long a, long b) {
		return a*b/(gcd(a,b));
	}
}