#include using namespace std; long long modpow(long long a, long long b, long long m){ long long ans = 1; while (b > 0){ if (b % 2 == 1){ ans = (__int128_t) ans * a % m; } a = (__int128_t) a * a % m; b /= 2; } return ans; } int main(){ long long B; cin >> B; long long N; cin >> N; vector> P; for (int i = 2; (long long) i * i <= B; i++){ if (B % i == 0){ int cnt = 0; while (B % i == 0){ B /= i; cnt++; } P.push_back(make_pair(i, cnt)); } } if (B > 1){ P.push_back(make_pair(B, 1)); } int cnt = P.size(); bool ok = true; for (int i = 0; i < cnt; i++){ long long p = P[i].first; int e = P[i].second; long long pe = 1; for (int j = 0; j < e; j++){ pe *= p; } long long b = N % pe; if (b != 0){ int c = 0; while (b % p == 0){ b /= p; c++; } if (c % 2 == 1){ ok = false; } else { e -= c; for (int j = 0; j < c; j++){ pe /= p; } if (p > 2){ long long phi = p - 1; for (int j = 0; j < e - 1; j++){ phi *= p; } if (modpow(b, phi / 2, pe) != 1){ ok = false; } } else { if (b % 8 != 1){ ok = false; } } } } } if (ok){ cout << "YES" << endl; } else { cout << "NO" << endl; } }