#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define vc vector
#define F first
#define S second
#define yes cout << "YES" << '\n'
#define no cout << "NO" << '\n'
#define el '\n'
#define ln cout << '\n'
#define pb push_back
#define all(x) (x).begin(),(x).end()
#define alli(n) int i = 0 ; i< n ;i++
#define cin(v) for(auto& ele : v)cin>>ele
#define print(v) for(auto& ele : v)cout << ele << ' '
#define test1(x) cout << x << '\n'
#define test(x,y) cout << x << ' ' << y << '\n'
#define var int n;cin>>n
#define var1 int n,m;cin>>n>>m
#define vc2Dint vector<vector<int>>
#define vc2Dll vector<vector<long long>>
#define cin2D(v) for(auto& row : (v))for(auto& col : row)cin>>col
#define print2D(v) for(auto& row : v){for(auto& col: row)cout << col << ' ';ln;}
using namespace std;
ll mod = 1e15 , oo = 1e18;
bool getBit(int x,int idx){ return x&(1<<idx);}
int setBit1(int x,int idx){return x|(1<<idx);}
int setBit0(int x,int idx){ return x&~(1<<idx);}
int toggleBit(int x,int idx){return x^(1<<idx);}
int cntBit(int x){int cnt=0;while(x){if(x%2)cnt++;x/=2;}return cnt;}
// ================================== bitmask built in functions ==================================
// __builtin_popcount(unsigned int)returns the number of set bits
// __builtin_ffs(int) finds the index of the first (most right) set bit
// __builtin_ctz(unsigned int) the count of trailing zeros(right zeros)
// ================================== math theory functions ==================================
vc<ll> getDivisors(ll n){vc<ll> v;ll i = 1;for( ; i*i < n ; i++){if(n%i == 0){v.pb(i);v.pb(n/i);}}if(i*i == n)v.pb(i);return v;}
vc<bool> sieve(ll n){vc<bool> is_prime(n+1, true);is_prime[0] = is_prime[1] = false;for (int i = 2; i * i <= n; i++)
{if (is_prime[i]) {for (int j = i * i; j <= n; j += i)is_prime[j] = false;}}return is_prime;}
bool isPrime(ll number) {if (number < 2) {return false;}if (number == 2 || number == 3 || number == 5) {return true;}
if (number % 2 == 0 || number % 3 == 0 || number % 5 == 0) {return false;}
for (ll i = 5; i*i<= number; i += 6) {if (number % i == 0 || number % (i + 2) == 0) {return false;}}return true;}
ll add(ll a,ll b,ll m){return ((a%m)+(b%m))%m;}
ll mul(ll a,ll b,ll m){return ((a%m)*(b%m))%m;}
ll sub(ll a,ll b,ll m){return ((a%m)-(b%m)+m)%m;}
ll gcd(ll a, ll b){ return b == 0 ? a : gcd(b, a % b);}
ll lcm(ll a, ll b){return (a / gcd(a, b)) * b;}
ll factorial(ll n){if(n == 0)return 1;ll i = n , fact = 1;while(n/i != n){fact = mul(fact,i,998244353);i--;}return fact;}
ll npr(ll n , ll r){return factorial(n)/factorial(n-r);}
ll ncr(ll n, ll r){return npr(n,r)/factorial(r);}
// ================================== random functions ==================================
void srour(){
ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
#ifndef ONLINE_JUDGE
freopen("Input.txt", "r", stdin);freopen("Output.txt", "w", stdout);
#endif
}
ll power(ll x, ll y){ll res = 1;while (y > 0){if (y % 2 == 1)res = mul(res,x,mod);y=y>>1;x = mul(x,x,mod);}return res;}
bool isDivisibleByPowerOf2(int n, int k) {return (n & (1<<k - 1)) == 0;}
bool isPowerOfTwo(unsigned int n) {return n && !(n & (n - 1));}
/*
███████╗██████╗ ██████╗ ██╗ ██╗██████╗
██╔════╝██╔══██╗██╔═══██╗██║ ██║██╔══██╗
███████╗██████╔╝██║ ██║██║ ██║██████╔╝
╚════██║██╔══██╗██║ ██║██║ ██║██╔══██╗
███████║██║ ██║╚██████╔╝╚██████╔╝██║ ██║
╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝
================================================== start of code ==================================================
1 12
1000000000000
*/
vc<ll> primeFactorization(ll n){
vc<ll> primes;
for(ll i = 2 ; i*i <= n ; i++){
while(n%i == 0){
n/=i;
primes.pb(i);
}
}
if(n != 1){
primes.pb(n);
}
return primes;
}
void solve(){
ll n,k;cin>>n>>k;
vc<ll> v;
for(alli(n)){
ll num;cin>>num;
vc<ll> vP = primeFactorization(num);
v.insert(v.end(),vP.begin(),vP.end());
}
map<ll,ll> primes;
for(int i = 0 ; i< v.size() ; i++){
primes[v[i]]++;
}
for(auto&ele : primes){
if(ele.S%k != 0){
no;return;
}
}
yes;
}
int main(){
srour();
int t = 1;
// cin>>t;
while(t--)
solve();
return 0;
}