#include <bits/stdc++.h>
using namespace std;
const int maxn = 1050000;
int h, g, n, res, a[2 * maxn], ap[2 * maxn];
bool cmpP(const int &a, const int &b) { return a > b; }
int H[2 * maxn], deep[2 * maxn], mindeep[2 * maxn];
int Min(int a, int b, int c) {
  if (!a && !b)
    return c;
  else if (!a)
    return b;
  else if (!b)
    return a;
  else
    return min(a, b);
}
void update(int k) {
  int t = k << 1;
  H[k] = (a[t] > a[t + 1]) ? H[t] + 1 : H[t + 1] + 1;
}
void del(int k) {
  int t = k << 1;
  if (a[t] == 0 && a[t + 1] == 0) {
    a[k] = 0;
    H[k] = 0;
    return;
  }
  if (a[t] > a[t + 1]) {
    a[k] = a[t];
    del(t);
  } else {
    a[k] = a[t + 1];
    del(t + 1);
  }
  ap[a[k]] = k;
  update(k);
}
void pre(int k, int last) {
  deep[k] = deep[last] + 1;
  if (!a[k]) return;
  int t = k << 1;
  if (a[t]) pre(t, k);
  if (a[t + 1]) pre(t + 1, k);
  update(k);
}
int T, ans0, ans[maxn], p[2 * maxn];
int main() {
  scanf("%d", &T);
  while (T--) {
    scanf("%d %d", &h, &g);
    n = (1 << h) - 1, res = n - ((1 << g) - 1);
    for (int i = 0; i <= 2 * n + 2; i++)
      a[i] = 0, ap[i] = 0, mindeep[i] = 0, H[i] = 0;
    long long sum = 0;
    for (int i = 1; i <= n; i++)
      scanf("%d", &a[i]), ap[a[i]] = i, sum += a[i], p[i] = a[i],
                          mindeep[i] = h;
    pre(1, 0);
    sort(p + 1, p + 1 + n, cmpP);
    ans0 = 0;
    for (int i = 1; i <= n && res; i++)
      if (H[ap[p[i]]] + deep[ap[p[i]]] - 2 >= g) {
        sum -= p[i];
        int cur = ap[p[i]];
        ans[++ans0] = cur;
        del(cur);
        for (; cur; cur >>= 1) update(cur);
        res--;
      }
    assert(res == 0);
    printf("%lld\n", sum);
    for (int i = 1; i <= ans0; i++) printf("%d ", ans[i]);
    puts("");
  }
}
