数字改造大师
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

🐶同学正在研究二进制的奥秘,他发现对于一个给定的正整数,如果允许修改它的二进制表示中的某一位(将0改成1,或将1改成0),可以得到一个新的数字。

他邀请你完成以下挑战:

可以在任意位置上进行修改,但是必须恰好进行x次,且不能修改这个数字的二进制位数,同时要最大化最后的值。

如果你能完成挑战,那么将被授予“数字改造大师”称号。

(小瘪三,不用看了,在我这里)

输入描述:

第一行一个正整数T(1 \leq T \leq 10^3), 表示测试组数。

对于每组测试,第一行一个整数n, x(1 \leq n, x \leq 10^9),表示需要被改造的数字和允许的改造次数。

输出描述:

对于每组测试输出一个整数,表示被改造后的数字。
示例1

输入

复制
2
1 1
2 1

输出

复制
0
3

说明

二进制下的1为1,改造最后一位可以得到0,即十进制下的0
二进制下的2为10,改造最后一位可以得到11,即十进制下的3

备注:

注意本题为多测,即首先需要读入测试样例数,例如本题的输入模板如下

int tt;
std::cin >> tt;

while (tt--) { 
    int n, x;
    std::cin >> n >> x;
}