#include <bits/stdc++.h>
using namespace std;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long n, m;
  cin >> n >> m;
  long long a[n][m];
  vector<long long> b(n);
  for (int i = 0; i < n; i++) {
    long long k = 0;
    for (int j = 0; j < m; j++) {
      cin >> a[i][j];
      k += a[i][j];
    }
    b[i] = k;
  }
  if (n <= 4 || m <= 4) {
    long long res = 0;
    for (int i = 0; i < n; i++) res += b[i];
    cout << res;
    return 0;
  }
  vector<long long> c(m);
  for (int j = 0; j < m; j++) {
    long long k = 0;
    for (int i = 0; i < n; i++) {
      k += a[i][j];
    }
    c[j] = k;
  }
  long long res = 0;
  vector<long long> d = b;
  vector<long long> e = c;
  sort(d.begin(), d.end());
  sort(e.begin(), e.end());
  res = max(d[n - 1] + d[n - 2] + d[n - 3] + d[n - 4],
            e[m - 1] + e[m - 2] + e[m - 3] + e[m - 4]);
  for (int i = 0; i < n; i++) {
    vector<long long> f;
    for (int j = 0; j < m; j++) {
      f.push_back(c[j] - a[i][j]);
    }
    sort(f.begin(), f.end());
    res = max(res, b[i] + f[m - 1] + f[m - 2] + f[m - 3]);
  }
  for (int j = 0; j < m; j++) {
    vector<long long> f;
    for (int i = 0; i < n; i++) {
      f.push_back(b[i] - a[i][j]);
    }
    sort(f.begin(), f.end());
    res = max(res, c[j] + f[n - 1] + f[n - 2] + f[n - 3]);
  }
  if (n <= m) {
    for (int i = 0; i < n; i++) {
      for (int l = i + 1; i < n; i++) {
        vector<long long> f;
        for (int j = 0; j < m; j++) {
          f.push_back(c[j] - a[i][j] - a[l][j]);
        }
        sort(f.begin(), f.end());
        res = max(res, b[i] + b[l] + f[m - 1] + f[m - 2]);
      }
    }
  } else {
    for (int j = 0; j < m; j++) {
      for (int l = j + 1; j < m; j++) {
        vector<long long> f;
        for (int i = 0; i < n; i++) {
          f.push_back(b[i] - a[i][j] - a[i][l]);
        }
        sort(f.begin(), f.end());
        res = max(res, c[j] + c[l] + f[n - 1] + f[n - 2]);
      }
    }
  }
  cout << res;
}
