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.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main {
	public static ArrayList<Integer> getPrimes(){
		ArrayList<Integer> result = new ArrayList<Integer>();
		boolean[] primes = new boolean[1000001];
		for(int i=2;i<1000001;i++){
			primes[i] = true;
		}
		for(int i=2;i<=1000;i++){
			if(primes[i]){
				for(int j = i*2;j<1000001;j+=i){
					primes[j] = false;
				}
			}
		}
		for(int i=0;i<1000001;i++){
			if(primes[i])result.add(i);
		}
		return result;
	}
	public static void main(String[] args){
		InputReader sc = new InputReader(System.in);
		int n = sc.nextInt();
		int k = sc.nextInt();
		int k2 = k;
		int[] a = new int[n];
		for(int i=0;i<n;i++){
			a[i] = sc.nextInt();
		}
		ArrayList<Integer> primes = getPrimes();
		ArrayList<Integer> numbers = new ArrayList<Integer>();
		for(int i=0;i<primes.size();i++){
			int num = 1;
			while(k % primes.get(i) == 0){
				k /= primes.get(i);
				num *= primes.get(i);
			}
			if(num != 1){
				numbers.add(num);
			}
		}
		boolean yes = true;
		for(int i=0;i<numbers.size();i++){
			boolean flag = false;
			for(int j=0;j<a.length;j++){
				if(a[j] % numbers.get(i) == 0){
					flag = true;
					break;
				}
			}
			if(!flag){
				yes = false;
				break;
			}
		}
		System.out.println(yes ? "Yes" : "No");
	}
	
	static class InputReader {
		public BufferedReader reader;
		public StringTokenizer tokenizer;

		public InputReader(InputStream stream) {
			reader = new BufferedReader(new InputStreamReader(stream), 32768);
			tokenizer = null;
		}

		public String next() {
			while (tokenizer == null || !tokenizer.hasMoreTokens()) {
				try {
					tokenizer = new StringTokenizer(reader.readLine());
				} catch (IOException e) {
					throw new RuntimeException(e);
				}
			}
			return tokenizer.nextToken();
		}

		public int nextInt() {
			return Integer.parseInt(next());
		}

		public long nextLong() {
			return Long.parseLong(next());
		}

		public double nextDouble() {
			return Double.parseDouble(next());
		}

		public String nextLine() {
			String str = "";
			try {
				str = reader.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			}

			return str;
		}
	}
}