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.*;
import java.io.*;
/*
1 1
3
 */
public class B
{
	public static void main(String[] arg) throws IOException
	{
		new B();
	}
	public B() throws IOException
	{
		FastScanner in = new FastScanner(System.in);
		PrintWriter out = new PrintWriter(System.out);
		int[] sieve = new int[1_000_001];
		for(int i = 4; i < sieve.length; i+=2)
		{
			sieve[i] = 2;
		}
		
		for(int i = 3; i*i < sieve.length; i+=2)
		{
			if(sieve[i] == 0)
			{
				for(int j = i+i; j < sieve.length; j+=i)
				{
					if(sieve[j] == 0)
						sieve[j] = i;
				}
			}
		}
		int[] cnt = new int[1_000_001];
		int n = in.nextInt();
		int k = in.nextInt();
		if(k == 1)
		{
			System.out.println("Yes");
			return;
		}
		while(k > 1)
		{
			int div = sieve[k];
			if(div == 0)
			{
				cnt[k]++;
				break;
			}
			cnt[div]++;
			k /= div;
		}
		for(int i = 0; i < n; i++)
		{
			int c = in.nextInt();
			while(c > 1)
			{
				int div = sieve[c];
				if(div == 0)
				{
					if(cnt[c] == 1) cnt[c]--;
					break;
				}
				int pow = 0;
				while(c%div == 0)
				{
					c /= div;
					pow++;
				}
				if(pow >= cnt[div]) cnt[div] = 0;
			}
		}
		boolean ret = true;
		for(int i = 0; i < cnt.length; i++)
		{
			if(cnt[i] > 0) ret = false;
		}
		out.println(ret?"Yes":"No");
		in.close(); out.close();
	}
	class FastScanner 
	{
		final BufferedReader reader;
		String line;
		int index;
		public FastScanner(InputStream in)
		{
			reader = new BufferedReader(new InputStreamReader(in));
		}
		public FastScanner(File f) throws FileNotFoundException
		{
			reader = new BufferedReader(new FileReader(f));
		}
		public String readLine()
		{
			try
			{
				String line = reader.readLine();
				if(line == null) throw new IOException("End of stream");
				return line;
			}
			catch(IOException exception)
			{
				throw new RuntimeException(exception);
			}
		}
		public String nextLine()
		{
			if(line==null) return readLine();
			String s = line;
			line = null;
			return s.substring(index);
		}
		public String next()
		{
			if(line == null)
			{
				line = readLine();
				index = 0;
			}
			while(index >= line.length())
			{
				line = readLine();
				index = 0;
			}
			while(Character.isWhitespace(line.charAt(index)))
			{
				index++;
				while(index >= line.length())
				{
					line = readLine();
					index = 0;
				}
			}
			int endIndex = index;
			while(endIndex < line.length() && !Character.isWhitespace(line.charAt(endIndex)))
				endIndex++;
			String s = line.substring(index, endIndex);
			index = endIndex;
			return s;
		}
		public int nextInt() { return Integer.parseInt(next()); }
		public long nextLong() { return Long.parseLong(next()); }
		public double nextDouble() { return Double.parseDouble(next()); }
		public void close() {;}
	}
}