const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
// Write your code here
/**
* 1. Math.sqrt(n):
* 1.1 n必需≥0;
* 1.2 以4为界:n>4时,Math.sqrt(n) 比 n / 2使n变小更多;
* 2. n / 2:
* 2.1 以2为界:n>2时,n / 2 比 n - 1使n变小更多;
*
* 总结:
* n≤2,则n-1;n在区间(2,4]的则n/2;n>4,则Math.sqrt(n)
*/
/**
* 方案一:
* 缺点:n-1都要循环一次,性能消耗大且没必要
*/
// const dataNum = parseInt((await readline()).split(' ')[0])
// for (let i = 1; i <= dataNum; i++) {
// let [n, m] = (await readline()).split(' ').map(x => parseInt(x))
// for(let j = m; j >=1; j--) {
// n = n > 4 ? Math.ceil(Math.sqrt(n)) :
// n > 2 ? Math.ceil(n / 2) : n - 1
// }
// console.log(n)
// }
/**
* 方案二:
* 改为:当n≤2,直接减去剩下操作次数,中止循环;
* 缺点:看别人题解和讨论得知,循环log比一次性log的性能要差
*/
// const dataNum = parseInt((await readline()).split(' ')[0])
// for (let i = 1; i <= dataNum; i++) {
// let [n, m] = (await readline()).split(' ').map(x => parseInt(x))
// for(let j = m; j >=1; j--) {
// if (n > 4) n = Math.ceil(Math.sqrt(n))
// else if (n > 2) n = Math.ceil(n / 2)
// else {
// n = n - j
// break
// }
// }
// console.log(n)
// }
/**
* 方案三:
* 改为:一次性log
*/
// const dataNum = parseInt((await readline()).split(' ')[0])
// const logArr = []
// for (let i = 1; i <= dataNum; i++) {
// let [n, m] = (await readline()).split(' ').map(x => parseInt(x))
// for(let j = m; j >=1; j--) {
// if (n > 4) n = Math.ceil(Math.sqrt(n))
// else if (n > 2) n = Math.ceil(n / 2)
// else {
// n = n - j
// break
// }
// }
// logArr.push(n)
// }
// console.log(logArr.join('\n'))
/**
* 方案四:
* 综合时间和空间,平衡性能
*/
const dataNum = parseInt((await readline()).split(" ")[0]);
const logArr = [];
for (let i = 1; i <= dataNum; i++) {
let [n, m] = (await readline()).split(" ").map((x) => parseInt(x));
for (let j = m; j >= 1; j--) {
if (n > 4) n = Math.ceil(Math.sqrt(n));
else if (n > 2) n = Math.ceil(n / 2);
else {
n = n - j;
break;
}
}
logArr.push(n)
}
const batchSize = 1000; // 批次大小可调整
for (let i = 0; i < logArr.length; i += batchSize) {
const batch = logArr.slice(i, i + batchSize);
console.log(batch.join("\n")); // 每批拼接一次并输出
}
})();