fun main(args: Array) { val bf = java.io.BufferedReader(java.io.InputStreamReader(System.`in`)) val bfw = java.io.BufferedWriter(java.io.OutputStreamWriter(System.`out`)) repeat(bf.readLine()!!.toInt()) { val (N, Q) = bf.readLine()!!.split(" ").map{ it.toInt() } val A = bf.readLine()!!.split(" ").map{ it.toInt() }.toList() val S = A.sorted() val P = IntArray(N) { S.binarySearch(A[it]) }.toList() val ans = IntArray(N) val smaller = mutableListOf() val larger = mutableListOf() fun go(l: Int, r: Int) { if(l > r) { return } val m = (l + r) / 2 val x = A[m] val p = P[m] ans[p] = run { val sl = smaller.count{ it > x } val ls = larger.count{ it < x } if(p in smaller.size until N - larger.size) { if(sl == ls) { sl }else if(sl > ls) { if(sl - ls <= p) sl else -1 }else { if(ls - sl <= N - p - 1) ls else -1 } }else { -1 } } if(l < r) { larger.add(x) go(l, m-1) larger.removeAt(larger.size-1) smaller.add(x) go(m+1, r) smaller.removeAt(smaller.size-1) } } go(0, N-1) bfw.write(generateSequence { ans[S.binarySearch(bf.readLine()!!.toInt())] }.take(Q).joinToString("\n")) bfw.write("\n") } bfw.flush() }