using System;

class Program
{
    static void Main()
    {
        int T=int.Parse(Console.ReadLine());
        for(int i=0;i<T;i++)
        {
            string[] input=Console.ReadLine().Split();
            int n=int.Parse(input[0]);
            int m=int.Parse(input[1]);
            while(m-->0)
            {
                if(n>=5)n=(int)Math.Ceiling(Math.Sqrt(n));
                else if(n>=0)
                {
                    int n1=(int)Math.Ceiling(Math.Sqrt(n));
                    int n2=n-1;
                    int n3=n/2+1;
                    n=Math.Min(n3,Math.Min(n1,n2));
                }
                else
                {
                    n-=m+1;
                    break;
                }
            }
            Console.WriteLine(n);
        }
    }
}
    

有一点算法在里面,大于等于3的时候,第一种方法值最小。小于0时,第三种方法值最小。其余则三种方法都试一遍取最小值。

注意小于0时不要n--,不然运行时间会超时。