#include <bits/stdc++.h>
using namespace std;
const int N = 13;
const int M = 2100;
int arr[N][M];
pair<int, int> pos[M];
int s[N];
int mx[N];
int pre[M][1 << N];
int dp[M][1 << N];
int main() {
  ios::sync_with_stdio(false);
  int t;
  cin >> t;
  while (t--) {
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= m; j++) {
        cin >> arr[i][j];
      }
    }
    for (int j = 1; j <= m; j++) {
      int mxp = 1;
      for (int i = 2; i <= n; i++) {
        if (arr[i][j] > arr[mxp][j]) mxp = i;
      }
      pos[j] = make_pair(arr[mxp][j], j);
    }
    sort(pos + 1, pos + m + 1, greater<pair<int, int>>());
    m = min(m, n);
    memset(pre, 0, sizeof pre);
    for (int i = 1; i <= m; i++) {
      for (int sp = 1; sp <= n; sp++) {
        for (int s = 1; s <= (1 << n) - 1; s++) {
          int tot = 0;
          for (int k = 0; k < n; k++) {
            int cur = sp + k > n ? sp + k - n : sp + k;
            if (s & (1 << k)) tot += arr[cur][pos[i].second];
          }
          pre[i][s] = max(pre[i][s], tot);
        }
      }
    }
    for (int i = 1; i <= m; i++) {
      for (int s = 1; s <= (1 << n) - 1; s++) {
        dp[i][s] = pre[i][s];
        for (int u = s; u; u = ((u - 1) & s)) {
          dp[i][s] = max(dp[i][s], dp[i - 1][u] + pre[i][s - u]);
        }
      }
    }
    cout << dp[m][(1 << n) - 1] << endl;
  }
}
