#include <bits/stdc++.h>
using namespace std;
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(0);
  int T;
  cin >> T;
  for (int test = 0; test < T; ++test) {
    int n, m;
    cin >> n >> m;
    vector<vector<int> > a(n, vector<int>(m));
    vector<pair<int, int> > ts(m);
    for (int i = 0; i < m; ++i) ts[i] = pair<int, int>(0, i);
    for (int i = 0; i < n; ++i) {
      for (int j = 0; j < m; ++j) {
        cin >> a[i][j];
        ts[j].first = max(ts[j].first, a[i][j]);
      }
    }
    sort(ts.rbegin(), ts.rend());
    vector<vector<int> > v(min(n, m), vector<int>(n));
    for (int i = 0; i < v.size(); ++i) {
      for (int j = 0; j < n; ++j) {
        v[i][j] = a[j][ts[i].second];
      }
    }
    vector<int> d(1 << n);
    int MASK = (1 << n) - 1;
    for (int i = 0; i < v.size(); ++i) {
      vector<int> sum(d.size());
      for (int r = 0; r < n; ++r) {
        vector<int> x(n);
        for (int j = 0; j < n; ++j) x[j] = v[i][(j + r) % n];
        for (int mask = 0; mask < d.size(); ++mask) {
          int s = 0;
          for (int j = 0; j < n; ++j)
            if (mask & (1 << j)) s += x[j];
          sum[mask] = max(sum[mask], s);
        }
      }
      vector<int> nd = d;
      for (int mask = 0; mask < d.size(); ++mask) {
        for (int nmask = mask; nmask <= MASK; nmask = ((nmask + 1) | mask)) {
          nd[nmask] = max(nd[nmask], d[mask] + sum[nmask ^ mask]);
        }
      }
      d.swap(nd);
    }
    cout << d.back() << '\n';
  }
  return 0;
}
