struct Point { pub time: i64, pub pos: i64, } impl Point { pub fn new(time: i64, pos: i64) -> Self { Point { time, pos } } } fn main() { // input N,M let nm: Vec = { let mut s = String::new(); std::io::stdin().read_line(&mut s).unwrap(); s.split_whitespace().map(|x| x.parse().unwrap()).collect() }; // input Vec(T[1..M],P[1..M]) let mut v: Vec = Vec::new(); for i in 0..nm[1] { let tp: Vec = { let mut s = String::new(); std::io::stdin().read_line(&mut s).unwrap(); s.split_whitespace().map(|x| x.parse().unwrap()).collect() }; v.push(Point::new(tp[0], tp[1])); } // sort v.sort_by(|a,b| b.time.cmp(&a.time)); v.reverse(); // simulation let mut t = 0; let mut p = 0; for i in v.iter() { if i.time-t >= (i.pos-p).abs() { t = i.time; p = i.pos; } else { println!("No"); return; } } println!("Yes"); }