#include #include typedef unsigned long long ULLONG; typedef long long LLONG; static const LLONG MOD_NUM = 1000000007LL; //998244353LL; static const LLONG INF_NUM = LLONG_MAX; template static void get(_T& a) { std::cin >> a; } template static void get(_T& a, _T& b) { std::cin >> a >> b; } template static void get(_T& a, _T& b, _T& c) { std::cin >> a >> b >> c; } template static _T tp_abs(_T a) { if (a < (_T)0) { a *= (_T)-1; } return a; } template void tp_getPrimes(_T targ, std::map<_T, _T>& primes) { _T target = targ; _T i = 2; while ((i * i) <= target) { if ((target % i) == 0) { target /= i; primes[i]++; } else { i++; } } if (target > 1) { primes[target]++; } } template static _T tp_pow(int x, int exp) { _T ans = 1; _T base = x; while (exp > 0) { if (exp & 1) { ans = (ans * base); } base = (base * base); exp >>= 1; } return ans; } static void task(); int main() { task(); fflush(stdout); return 0; } static void task() { int N, K; get(N, K); for (int n = 0; n <= N; n++) { int rest = N - n; std::map bin, three; tp_getPrimes(n, bin); tp_getPrimes(rest, three); if (bin.size() == 1 && bin[2] && three[3]) { int mul = bin[2]; int thCnt = 0; for (auto t : three) { if (t.first != 3) { thCnt += tp_pow(t.first, t.second); } } thCnt *= three[3]; int cnt = tp_pow(2, mul); int surp = std::max(0, thCnt - cnt); if (surp + mul <= K) { printf("YES\n"); return; } } } printf("NO\n"); }