#include //#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //using namespace atcoder; using namespace std; using ll = long long; #define all(A) A.begin(),A.end() using vll = vector; #define rep(i, n) for (long long i = 0; i < (long long)(n); i++) using Graph = vector>>>; int main() { ll N, K; cin >> N >> K; vll DP(N+1, 1e18); priority_queue, vector>, greater>>Q; Q.push(make_pair(0, 1)); DP[1] = 0; while (!Q.empty()) { auto p = Q.top(); Q.pop(); ll G = p.first; ll H = p.second; if (G >= K)continue; if (2 * H <= N) { if (DP[2 * H] > DP[H] + 1) { DP[2 * H] = DP[H] + 1; Q.push(make_pair(G + 1, 2 * H)); } } if (3+H <= N) { if (DP[3+H] > DP[H] + 1) { DP[3+ H] = DP[H] + 1; Q.push(make_pair(G + 1, 3+H)); } } } if (DP[N] > 1e17) { cout << "NO" << endl; } else cout << "YES" << endl; }