// msbが同じならng // 異なるときは? // rが0ならlは1をとってよい // (r+2^k)*l < r*(l+2^k) // 要するに2^k * (2^k - 1) use proconio::{fastout, input}; #[fastout] fn main() { input! { t: usize } for _ in 0..t { let ans = solve(); println!("{}", ans as isize); } } fn solve() -> usize { input! { l: usize, r: usize, } for k in (0..30).rev() { let b = 1 << k; let a = b - 1; if (l..=r).contains(&a) && (l..=r).contains(&b) { return a * b; } } !0 }