use std::collections::BTreeMap; fn main() { let mut nk = String::new(); std::io::stdin().read_line(&mut nk).ok(); let nk: Vec = nk.trim().split_whitespace().map(|s| s.parse().unwrap()).collect(); let n = nk[0]; let k = nk[1]; let queries = (0..n).map(|_| { let mut ab = String::new(); std::io::stdin().read_line(&mut ab).ok(); let ab: Vec = ab.trim().split_whitespace().map(|s| s.parse().unwrap()).collect(); (ab[0], ab[1]) }) .collect::>(); let mut lower = 0usize; let mut upper = 1e9 as usize; while upper > lower { let middle = (lower + upper) / 2; let mut lcnts = 0usize; let mut flg = false; for &(a, b) in queries.iter() { flg |= a <= middle && middle <= b; if a <= middle { lcnts += (middle - a + 1).min(b - a + 1); } } if lcnts >= k { if flg { upper = middle; } else { upper = middle - 1; } } else { lower = middle + 1; } } println!("{}", upper); }