#include <bits/stdc++.h>
using namespace std;
int n, m, x, y, ans, crt[2005], t, p[2005], DP[13][1 << 13], prec[13][1 << 13];
vector<int> v[2005];
void perm(vector<int> &v) {
  int sav = v[n];
  for (int i = n - 1; i >= 1; i--) {
    v[i + 1] = v[i];
  }
  v[1] = sav;
}
int getSum(int i, int cfg) {
  int ans = 0;
  for (int j = 0; j < n; j++) {
    if (cfg & (1 << j)) ans += v[i][j + 1];
  }
  return ans;
}
void solve() {
  int mx = 1 << n;
  memset(DP, 0, sizeof(DP));
  memset(prec, 0, sizeof(prec));
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      for (int cfg = 0; cfg < mx; cfg++) {
        prec[i][cfg] = max(prec[i][cfg], getSum(i, cfg));
      }
      perm(v[i]);
    }
  }
  int ans = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < mx; j++)
      for (int k = j; k < mx; k = (j | (k + 1))) {
        DP[i][k] = max(DP[i][k], DP[i - 1][j] + prec[i][k ^ j]);
        if (DP[i][k] > ans) {
          ans = DP[i][k];
        }
      }
  }
  cout << ans << '\n';
}
bool comp(vector<int> a, vector<int> b) { return a[0] > b[0]; }
int main() {
  ios::sync_with_stdio(false);
  cin >> t;
  while (t--) {
    ans = 0;
    cin >> n >> m;
    for (int i = 1; i <= max(n, m); i++) {
      v[i].clear();
      v[i].resize(n + 1, 0);
    }
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= m; j++) {
        cin >> v[j][i];
      }
    }
    for (int j = 1; j <= m; j++) {
      for (int i = 1; i <= n; i++) v[j][0] = max(v[j][0], v[j][i]);
    }
    m = max(m, n);
    sort(v + 1, v + m + 1, comp);
    solve();
  }
  return 0;
}
