use std::collections::BTreeSet; use proconio::input; fn main() { // const D:usize=60; input! { t:usize, } for _ in 0..t { input! { n:usize, x:usize, c:[usize;n], } let mut xy = vec![]; for i in 0..n { if x & (1 << c[i]) != 0 { continue; } let pow2 = 2usize.pow(c[i] as u32 + 1); let rem = x % pow2; let x = if x < pow2 { INF } else { rem + 1 }; let y = pow2 / 2 - rem; xy.push((x, y)); } if xy.is_empty() { println!("0"); continue; } xy.sort_by(|a, b| b.0.cmp(&a.0)); // println!("xy:{:?}",xy); let mut ans = INF; let mut bt = BTreeSet::new(); for &(x, y) in xy.iter() { let maxy = *bt.iter().last().unwrap_or(&0); if x != INF { ans = ans.min(2 * (x + maxy)); } bt.insert(y); } ans = ans.min(2 * *bt.iter().last().unwrap()); println!("{}", ans); } } const INF: usize = std::usize::MAX;