#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(false);
  cout.tie(0);
  cin.tie(0);
  int n, m;
  cin >> n >> m;
  vector<vector<long long>> a(n, vector<long long>(m));
  vector<vector<long long>> b(m, vector<long long>(n));
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      cin >> a[i][j];
      b[j][i] = a[i][j];
    }
  }
  if (n > m) {
    swap(n, m);
    swap(a, b);
  }
  if (n < 5) {
    long long sum = 0;
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        sum += a[i][j];
      }
    }
    cout << sum << endl;
    return 0;
  }
  long long ans = 0;
  vector<long long> r(n), c(m);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      r[i] += a[i][j];
      c[j] += a[i][j];
    }
  }
  for (int i = 0; i < n; i++) {
    long long m1 = -1, m2 = -1, m3 = -1;
    for (int j = 0; j < m; j++) {
      long long val = c[j] - a[i][j];
      if (val >= m1) {
        m3 = m2;
        m2 = m1;
        m1 = val;
      } else if (val >= m2) {
        m3 = m2;
        m2 = val;
      } else if (val >= m3) {
        m3 = val;
      }
    }
    ans = max(ans, r[i] + m1 + m2 + m3);
  }
  for (int j = 0; j < m; j++) {
    long long m1 = -1, m2 = -1, m3 = -1;
    for (int i = 0; i < n; i++) {
      long long val = r[i] - a[i][j];
      if (val >= m1) {
        m3 = m2;
        m2 = m1;
        m1 = val;
      } else if (val >= m2) {
        m3 = m2;
        m2 = val;
      } else if (val >= m3) {
        m3 = val;
      }
    }
    ans = max(ans, c[j] + m1 + m2 + m3);
  }
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      long long m1 = -1, m2 = -1;
      for (int l = 0; l < m; l++) {
        long long val = c[l] - a[i][l] - a[j][l];
        if (val >= m1) {
          m2 = m1;
          m1 = val;
        } else if (val >= m2) {
          m2 = val;
        }
      }
      ans = max(ans, r[i] + r[j] + m1 + m2);
    }
  }
  sort(r.begin(), r.end());
  reverse(r.begin(), r.end());
  sort(c.begin(), c.end());
  reverse(c.begin(), c.end());
  long long cur1 = 0, cur2 = 0;
  for (int i = 0; i < 4; i++) {
    cur1 += r[i];
  }
  for (int i = 0; i < 4; i++) {
    cur2 += c[i];
  }
  cout << max(max(cur1, cur2), ans) << endl;
}
