#include <bits/extc++.h>
#define endl '\n'
typedef long long ll;
#define int ll
using namespace std;
using namespace __gnu_cxx;
using namespace __gnu_pbds;
void Main() {
  int n, m;
  cin >> n >> m;
  vector<vector<int>> t(n + 1, vector<int>(m + 1)),
      d(n + 1, vector<int>(m + 1));
  vector<vector<vector<int>>> dp(
      n + 1, vector<vector<int>>(m + 1, vector<int>(2, 0x3f3f3f3f3f3f3f3f)));
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      cin >> t[i][j];
    }
  }
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      cin >> d[i][j];
    }
  }
  dp[1][1][1] = t[1][1] + d[1][1];
  dp[1][1][0] = t[1][1];
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      if (j > 1) {
        dp[i][j][0] =
            min(dp[i][j - 1][0] + t[i][j], dp[i][j - 1][1] + t[i][j] + d[i][j]);
      }
      if (i > 1) {
        dp[i][j][1] =
            min(dp[i - 1][j][1] + t[i][j], dp[i - 1][j][0] + t[i][j] + d[i][j]);
      }
    }
  }
  cout << dp[n][m][1] << endl;
}
signed main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  int t;
  cin >> t;
  while (t--) {
    Main();
  }
  return 0;
}
// DP