fn read<T: std::str::FromStr>() -> T
where
    <T as std::str::FromStr>::Err: std::fmt::Debug,
{
    let mut b = String::new();
    std::io::stdin().read_line(&mut b).unwrap();
    b.trim().parse().unwrap()
}

fn dfs(d: i32, cx: i32, cy: i32) -> bool {
    if cx == 0 && cy == 0 {
        return true;
    }
    if d == 0 {
        return false;
    }
    for dx in (-2)..3 {
        for dy in (-2)..3 {
            if (dx as i32).abs() + (dy as i32).abs() != 3 {
                continue;
            }
            if dfs(d - 1, cx + dx, cy + dy) {
                return true;
            }
        }
    }

    false
}

fn main() {
    let mut b = String::new();
    std::io::stdin().read_line(&mut b).unwrap();
    let iv: Vec<i32> = b
        .split(' ')
        .map(|x| x.trim().parse::<i32>().unwrap())
        .collect();
    let (x, y) = (iv[0], iv[1]);

    println!("{}", if dfs(3, x, y) { "YES" } else { "NO" })
}