#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
int read() {
  int x = 0, flag = 1;
  char c = getchar();
  while ((c > '9' || c < '0') && c != '-') c = getchar();
  if (c == '-') flag = 0, c = getchar();
  while (c <= '9' && c >= '0') {
    x = (x << 3) + (x << 1) + c - '0';
    c = getchar();
  }
  return flag ? x : -x;
}
const int maxn = (1 << 21) + 5;
int w[maxn], a[maxn], T, h, g, b[maxn], n, m, v[maxn];
int maxh(int i) {
  if (!a[i << 1] && !a[i << 1 | 1]) {
    int ret = 0;
    while (i) ret++, i >>= 1;
    return ret - 1;
  }
  if (a[i << 1] > a[i << 1 | 1])
    return maxh(i << 1);
  else
    return maxh(i << 1 | 1);
}
void del(int i) {
  if (!a[i << 1] && !a[i << 1 | 1])
    a[i] = 0;
  else if (a[i << 1] > a[i << 1 | 1])
    w[a[i << 1]] = i, a[i] = a[i << 1], del(i << 1);
  else
    w[a[i << 1 | 1]] = i, a[i] = a[i << 1 | 1], del(i << 1 | 1);
}
int main() {
  T = read();
  while (T--) {
    h = read(), g = read();
    n = (1 << h) - 1;
    m = (1 << g) - 1;
    fill(a, a + n * 2 + 5, 0);
    for (int i = (1); i <= (int)(n); i++)
      a[i] = read(), w[a[i]] = i, b[i] = a[i];
    sort(b + 1, b + n + 1, greater<int>());
    int tot = 0;
    for (int i = (1); i <= (int)(n); i++) {
      if (tot >= n - m) break;
      int temp = maxh(w[b[i]]);
      if (temp >= g) {
        v[tot++] = w[b[i]];
        del(w[b[i]]);
      }
    }
    long long ans = 0;
    for (int i = (1); i <= (int)(m); i++) ans += a[i];
    printf("%lld\n", ans);
    for (int i = (0); i <= (int)(tot - 1); i++) printf("%d ", v[i]);
    puts("");
  }
  return 0;
}
