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.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

import java.io.IOException;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;

public class S2 {
	
	static class Reader {
		
		static BufferedReader reader;
		static StringTokenizer tokenizer;
		
		static void init(InputStream input) {
			reader = new BufferedReader(new InputStreamReader(input));
			tokenizer = new StringTokenizer("");
		}
		
		static String next() throws IOException {
			while(!tokenizer.hasMoreTokens()) {
				tokenizer = new StringTokenizer(reader.readLine());
			}
			return tokenizer.nextToken();
		}
		
		static int nextInt() throws IOException {
			return Integer.parseInt(next());
		}
		
		static long nextLong() throws IOException {
			return Long.parseLong(next());
		}
		
	}
	
	private class Node {
		
		public long primePower;
		public boolean done;
		
		public Node(long x) {
			// TODO Auto-generated constructor stub
			primePower=x;
			done=false;
		}
		
		public void check(long b) {
			if(!done) {
				if(b%primePower==0) {
					done=true;
				}
			}
		}
		
	}
	
	private final static long fd = 998244353;
	
	private long n;
	private long k;
	
	
	
	public void drun() throws IOException {
		Reader.init(System.in);
		
		PrintWriter out = new PrintWriter(System.out);
		
		int tc=1;
	//	tc = Reader.nextInt();
		
		main_loop:
		for(int tn=0; tn<tc; tn++) {
			
			n = Reader.nextInt();
			k = Reader.nextInt();
			
			ArrayList<Node> primePowers = new ArrayList<S2.Node>();
			
			int i=2;
			
			while(i<=k) {
				if(k%i==0) {
					long p=i;
					while(k%(i*p)==0) {
						p*=i;
					}
					k/=p;
					primePowers.add(new Node(p));
				}
				i++;
			}

			int l=primePowers.size();
			
			for(int j=0; j<n; j++) {
				long c = Reader.nextLong();
				for(i=0; i<l; i++) {
					primePowers.get(i).check(c);
				}
			}
			
			boolean bruh = true;
			
			for(i=0; i<l; i++) {
				bruh&=primePowers.get(i).done;
			}
			
			if(bruh) {
				out.println("Yes");
			}
			else {
				out.println("No");
			}
			
		//	out.write(("YES").getBytes());
		//	out.write(("NO").getBytes());
			
		//	out.write((ans+" ").getBytes());
		//	out.print("\n");
			
		}
		
		out.flush();
		out.close();
	}
	
	public static void main(String[] args) throws IOException {
				
		S2 obj = new S2();
		obj.drun();
	}
		
}