#include <bits/stdc++.h>
using namespace std;
const int MAX = 2e5 + 6;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n, m;
  cin >> n >> m;
  vector<vector<long long int> > ara(n + 1, vector<long long int>(m + 1));
  vector<long long int> ro(n + 1), col(m + 1);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      cin >> ara[i][j];
      ro[i] += ara[i][j];
      col[j] += ara[i][j];
    }
  }
  long long int ans1 = 0, ans2 = 0, ans = 0;
  vector<long long int> v1, v2;
  for (int i = 1; i <= n; i++) v1.push_back(ro[i]);
  for (int i = 1; i <= m; i++) v2.push_back(col[i]);
  sort(v1.rbegin(), v1.rend());
  sort(v2.rbegin(), v2.rend());
  for (int i = 0; i < 4 && i < v1.size(); i++) ans1 += v1[i];
  for (int i = 0; i < 4 && i < v2.size(); i++) ans2 += v2[i];
  for (int i = 1; i <= 4; i++) {
    int rid = 1, cid = 1;
    for (int j = 1; j <= n; j++) {
      if (ro[rid] < ro[j]) {
        rid = j;
      }
    }
    for (int j = 1; j <= m; j++) {
      if (col[cid] < col[j]) {
        cid = j;
      }
    }
    ans += max(ro[rid], col[cid]);
    if (ro[rid] > col[cid]) {
      ro[rid] = 0;
      for (int j = 1; j <= m; j++) {
        if (col[j] == 0) continue;
        col[j] -= ara[rid][j];
      }
    } else {
      col[cid] = 0;
      for (int j = 1; j <= n; j++) {
        if (ro[j] == 0) continue;
        ro[j] -= ara[j][cid];
      }
    }
  }
  cout << max(max(ans1, ans2), ans) << '\n';
  return 0;
}
