use proconio::input; #[allow(unused)] use proconio::marker::*; #[allow(unused)] use std::collections::*; fn main() { input! { n: usize, m: usize, ab: [(usize, usize); n], }; let mut x = vec![]; for &(a, b) in &ab { x.push((m - a + b - 1) / b); } x.sort(); let mut l = 0; let mut r = 1 << 30; while r - l > 1 { let o = (r + l) / 2; let mut f = true; let mut i = 1; while f && i * o <= n { if x[i * o - 1] <= i { f = false; } i += 1; } if n % o > 0 && *x.last().unwrap() < i { f = false; } if f { r = o; } else { l = o; } } println!("{}", l); }