#include <bits/stdc++.h>
long long opt[2][1 << 5];
int h[100010][5];
int v[100010][5];
int n, m;
void renew(long long &a, long long b) {
  if (a == -1 || a > b) a = b;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m - 1; i++)
    for (int j = 0; j < n; j++) scanf("%d", &h[i][j]);
  for (int i = 0; i < m; i++)
    for (int j = 0; j < n; j++) scanf("%d", &v[i][j]);
  for (int i = 0; i < (1 << n); i++) opt[0][i] = 0, opt[1][i] = -1;
  for (int i = 0, s = 0; i < m; i++)
    for (int j = 0; j < n; j++) {
      for (int w = 0; w < (1 << n); w++)
        if (opt[s][w] != -1) {
          for (int k = 0; k < 2; k++) {
            if (i == 0 && k) continue;
            if (i == m - 1 && !k) continue;
            long long key = opt[s][w];
            if (j && (k ^ ((w & (1 << (j - 1))) > 0))) key += v[i][j - 1];
            if (j == n - 1 && (k ^ ((w & 1) > 0))) key += v[i][n - 1];
            if (i && k ^ ((w & (1 << j)) > 0)) key += h[i - 1][j];
            renew(opt[1 - s][(w & (((1 << n) - 1) ^ (1 << j))) | (k << j)],
                  key);
          }
          opt[s][w] = -1;
        }
      s = 1 - s;
    }
  printf("%I64d\n", opt[(n * m) & 1][(1 << n) - 1]);
}
