← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

func popcount64(x uint64) int64 {
	var c int64
	for x != 0 {
		x &= x - 1
		c++
	}
	return c
}

func floorLog2(x uint64) int64 {
	var p int64
	for x>>1 != 0 {
		x >>= 1
		p++
	}
	return p
}

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var t int
	fmt.Fscan(in, &t)
	for ; t > 0; t-- {
		var n int64
		var k uint64
		fmt.Fscan(in, &n, &k)

		if k == 0 || k == (uint64(1)<<uint(n)) {
			fmt.Fprintln(out, 0)
			continue
		}

		pc := popcount64(k)
		msb := floorLog2(k)
		ans := (int64(2)*pc - 1) + (n - msb - 1)
		fmt.Fprintln(out, ans)
	}
}
```