Solve in Python:
Recently, Olya received a magical square with the size of $2^n\times 2^n$.

It seems to her sister that one square is boring. Therefore, she asked Olya to perform exactly $k$ splitting operations.

A Splitting operation is an operation during which Olya takes a square with side $a$ and cuts it into 4 equal squares with side $\dfrac{a}{2}$. If the side of the square is equal to $1$, then it is impossible to apply a splitting operation to it (see examples for better understanding).

Olya is happy to fulfill her sister's request, but she also wants the condition of Olya's happiness to be satisfied after all operations.

The condition of Olya's happiness will be satisfied if the following statement is fulfilled:

Let the length of the side of the lower left square be equal to $a$, then the length of the side of the right upper square should also be equal to $a$. There should also be a path between them that consists only of squares with the side of length $a$. All consecutive squares on a path should have a common side.

Obviously, as long as we have one square, these conditions are met. So Olya is ready to fulfill her sister's request only under the condition that she is satisfied too. Tell her: is it possible to perform exactly $k$ splitting operations in a certain order so that the condition of Olya's happiness is satisfied? If it is possible, tell also the size of the side of squares of which the path from the lower left square to the upper right one will consist.


-----Input-----

The first line contains one integer $t$ ($1 \le t \le 10^3$) — the number of tests.

Each of the following $t$ lines contains two integers $n_i$ and $k_i$ ($1 \le n_i \le 10^9, 1 \le k_i \le 10^{18}$) — the description of the $i$-th test, which means that initially Olya's square has size of $2^{n_i}\times 2^{n_i}$ and Olya's sister asks her to do exactly $k_i$ splitting operations.


-----Output-----

Print $t$ lines, where in the $i$-th line you should output "YES" if it is possible to perform $k_i$ splitting operations in the...
import sys
import math
input = sys.stdin.readline

testcase=int(input())
T=[list(map(int,input().split())) for i in range(testcase)]

def bi(n,k):
    MIN=0
    MAX=n

    while MAX>MIN+1:
        bn=(MIN+MAX)//2
        if math.log2(k+2+bn)<bn+1:
            MAX=bn
        elif math.log2(k+2+bn)==bn+1:
            return bn
        else:
            MIN=bn

    if MAX+1<=math.log2(k+2+MAX):
        return MAX

    return MIN

for n,k in T:
    if n==1:
        if k==1:
            print("YES",0)
        else:
            print("NO")
        continue

    if n==2:
        if 1<=k<=2:
            print("YES",1)
        elif k==3:
            print("NO")
        elif 4<=k<=5:
            print("YES",0)
        else:
            print("NO")
        continue
        
    if n<=30 and k>(pow(4,n)-1)//3:
        print("NO")
        continue

    ANS=bi(n,k)

    print("YES",n-ANS)