← Home
```go
package main

import (
	"bufio"
	"fmt"
	"math/bits"
	"os"
)

func main() {
	in := bufio.NewReader(os.Stdin)
	var t int
	fmt.Fscan(in, &t)
	for _ = range make([]int, t) {
		var n, q int
		fmt.Fscan(in, &n, &q)
		a := make([]int64, n)
		for i := 0; i < n; i++ {
			fmt.Fscan(in, &a[i])
		}
		x := make([]int, q)
		for i := 0; i < q; i++ {
			fmt.Fscan(in, &x[i])
		}
		const MAXV = 30
		total_add := make([]int64, (q+1)*(MAXV+1))
		stride := MAXV + 1
		for pos := q - 1; pos >= 0; pos-- {
			xx := x[pos]
			for vv := 0; vv <= MAXV; vv++ {
				var this_add int64 = 0
				next_vv := vv
				if xx <= vv {
					this_add = int64(1) << uint(xx-1)
					next_vv = xx - 1
				}
				total_add[pos*stride+vv] = this_add + total_add[(pos+1)*stride+next_vv]
			}
		}
		for i := 0; i < n; i++ {
			v := bits.TrailingZeros64(uint64(a[i]))
			add := total_add[0*stride+v]
			final := a[i] + add
			if i > 0 {
				fmt.Print(" ")
			}
			fmt.Print(final)
		}
		fmt.Println()
	}
}
```