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.*;
import java.util.*;
import java.math.*;
public class Solve4 {
  public static int NWD(int a, int b)
{
  int pom;
 
    while(b!=0)
  {
      pom = b;
      b = a%b;
      a = pom;  
    }
    return a;
}
  public static void main(String[] args) {
  MyScanner scanner = new MyScanner();
  PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out));
    int n = scanner.nextInt();
    int k = scanner.nextInt();
    int[] t = new int[n];
    for(int i = 0; i < n; i++)
      t[i] = scanner.nextInt();
	  
	int[] primes = new int[1000001];
    for(int i = 1; i <= 1000000; i++) {
	  int j = 2;
	  while(j * j <= i) {
	    if(i%j==0&&primes[j]==j) break;
		j++;
	  }
	  if(i%j==0) primes[i] = j;
	  else primes[i] = i;
	  //System.out.println(i + " " + primes[i]);
	}
	int[] highest = new int[1000001];
	for(int i = 0; i < n; i++) {
	  int p = t[i];
	  while(p>1) {
	    int q = primes[p];
		int count = 0;
		while(p%q==0) {
		  count++;
		  p/=q;
		}
		highest[q] = Math.max(highest[q], count);
	  }
	}
	boolean ok = true;
    while(k>1) {
	    int q = primes[k];
		int count = 0;
		while(k%q==0) {
		  count++;
		  k/=q;
		}
		if(highest[q] < count) ok = false;
	}
    if(ok) {
      out.println("Yes");
    } else {
      out.println("No");
    }
    out.close();
  }

  public 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());
      }
 
      double nextDouble() {
          return Double.parseDouble(next());
      }
 
      String nextLine(){
          String str = "";
    try {
       str = br.readLine();
    } catch (IOException e) {
       e.printStackTrace();
    }
    return str;
      }

   }
}