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.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.*;
import java.util.*;
public class B {
	
	public static void main(String[] args) throws IOException {
		
		FastScanner qwe = new FastScanner(System.in);
		int n = qwe.nextInt();
		int k = qwe.nextInt();
		
		PrimeSieve ps = new PrimeSieve(1000001);
		
		int[] pps = new int[1000001];
		
		int cpy = k;
		
		while(cpy != 1){
			int p = ps.prime[cpy];
			if(p == 0){
				pps[cpy]++;
				break;
			}
			
			pps[p]++;
			cpy /= p;
		}
		
		
		
		for(int i =0; i < n; i++){
			
			int c = qwe.nextInt();
			while(c != 1){
				int p = ps.prime[c];
				
				if(p == 0){
					if(pps[c] == 1) pps[c] = 0;
					break;
				}
				
				int pow = 0;
				while(c % p == 0){
					pow++;
					c /= p;
				}
				if(pps[p] <= pow) pps[p] = 0;
				
			}			
			
			
		}
		
		boolean good = true;
		for (int i = 2; i < pps.length; i++) {
			if(pps[i] != 0){
				good = false;
			}
		}
		
		
		if(good) System.out.println("Yes");
		else System.out.println("No");
		
	}
	
	static class PrimeSieve {
		int[] prime;
		PrimeSieve(int N){
			prime = new int[N+1];
			int M = (int)Math.sqrt(N);
			for(int a=2;a<=M;a++)
				if(prime[a]==0)
					for(int b=a*a;b<=N;b+=a)
						if(prime[b]==0)
							prime[b]=a;
		}
			
		boolean isPrime(int N){
			return prime[N]==0;
		}
	}
	
	static class FastScanner {
		BufferedReader br;
		StringTokenizer st;
		
		public FastScanner(InputStream in) throws IOException{
			br = new BufferedReader(new InputStreamReader(in));
			st = new StringTokenizer(br.readLine().trim());
		}
		public FastScanner(File in) throws IOException{
			br = new BufferedReader(new FileReader(in));
			st = new StringTokenizer(br.readLine().trim());
		}
		public int numTokens() throws IOException {
			if(!st.hasMoreTokens()){
				st = new StringTokenizer(br.readLine().trim());
				return numTokens();
			}
			return st.countTokens();
		}
		public String next() throws IOException {
			if(!st.hasMoreTokens()){
				st = new StringTokenizer(br.readLine().trim());
				return next();
			}
			return st.nextToken();
		}
		public double nextDouble() throws IOException{
			return Double.parseDouble(next());
		}
		public float nextFloat() throws IOException{
			return Float.parseFloat(next());
		}
		public long nextLong() throws IOException{
			return Long.parseLong(next());
		}
		public int nextInt() throws IOException{
			return Integer.parseInt(next());
		}
		public String nextLine() throws IOException{
			return br.readLine().trim();
		}
	}

}