fn main() { let stdin = std::io::read_to_string(std::io::stdin()).unwrap(); let mut stdin = stdin.split_ascii_whitespace(); let n: usize = stdin.next().unwrap().parse().unwrap(); let k: u32 = stdin.next().unwrap().parse().unwrap(); println!("{}", output(solve(n, k))); } const fn prepare() -> [u8; SIZE] { let mut dp = [u8::MAX; SIZE]; dp[1] = 0; dp[2] = 1; let mut i = 4; while i < dp.len() { if i & 1 == 0 && dp[i - 3] > dp[i >> 1] { dp[i] = dp[i >> 1].saturating_add(1); } else { dp[i] = dp[i - 3].saturating_add(1); } i += 1; } dp } fn solve(n: usize, k: u32) -> bool { const DP: [u8; 200_001] = prepare(); DP[n] <= k.min(127) as u8 } fn output(ans: bool) -> &'static str { match ans { true => "YES", false => "NO", } }