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.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.StringTokenizer;


public class D360 {
	public static void main(String[] args) {
		
		int[] sieve = new int[1000001];
		Arrays.fill(sieve, -1);
		for(int i=2;i<=10000;i++){
			if(sieve[i]!=-1)continue;
			for(int j=2;i*j<=1000000;j++)
				sieve[i*j] = i;
		}
		
		MyScanner scan = new MyScanner();
		int N = scan.nextInt(), K = scan.nextInt();
		if(K==1){System.out.println("Yes");return;}
		
		int[] Kprimes = new int[1000001], ListPrimes = new int[1000001];
		boolean[] seen = new boolean[1000001];
		while(sieve[K]!=-1){
			Kprimes[sieve[K]]++;
			K/=sieve[K];
		}
		Kprimes[K]++;
		
		for(int i=0;i<N;i++){
			int a = scan.nextInt();
			if(seen[a])continue;
			else seen[a]=true;
			HashMap<Integer, Integer> map = new HashMap<>();
			while(sieve[a]!=-1){
				if(!map.containsKey(sieve[a]))map.put(sieve[a], 1);
				else map.put(sieve[a], map.get(sieve[a])+1);
				a/=sieve[a];
			}
			if(!map.containsKey(a))map.put(a, 1);
			else map.put(a, map.get(a)+1);
			for(int p : map.keySet()){
				int t = map.get(p);
				if(t>ListPrimes[p])ListPrimes[p]=t;
			}
		}
		boolean valid = true;
		for(int i=0;i<=1000000;i++){
			if(Kprimes[i]>ListPrimes[i]){valid=false;break;}
		}
		System.out.println(valid?"Yes":"No");
	}
	private static class MyScanner {
		BufferedReader br;
		StringTokenizer st;
		public MyScanner() {br = new BufferedReader(new InputStreamReader(System.in));}
		String next(){
			while(st==null||!st.hasMoreElements()){
				try{st = new StringTokenizer(br.readLine());}
				catch(IOException e){e.printStackTrace();}
			}return st.nextToken();
		}
		int nextInt() {return Integer.parseInt(next());}
		long nextLong(){return Long.parseLong(next());}
	}
}