#include <bits/stdc++.h>
using namespace std;
long long solve(int n, int m, vector<vector<long long>> a) {
  long long sum = 0;
  vector<long long> w(n), h(m);
  map<long long, int> s;
  for (long long i = 0; i < n; i++) {
    long long mn = a[i][0];
    for (long long j = 1; j < m; j++) mn += (a[i][j]);
    w[i] = mn;
    s[mn]++;
  }
  int cnt = 4;
  while (cnt && s.size()) {
    auto it = s.rbegin();
    int cot = min(cnt, it->second);
    cnt -= cot;
    sum += it->first * cot;
    s.erase(it->first);
  }
  long long sum2 = 0;
  s.clear();
  for (long long i = 0; i < m; i++) {
    long long mn = a[0][i];
    for (long long j = 1; j < n; j++) mn += (a[j][i]);
    h[i] = mn;
    s[mn]++;
  }
  cnt = 4;
  while (cnt && s.size()) {
    auto it = s.rbegin();
    int cot = min(cnt, it->second);
    cnt -= cot;
    sum2 += it->first * cot;
    s.erase(it->first);
  }
  sum2 = max(sum, sum2);
  sum = 0;
  for (long long k = 0; k < 4; k++) {
    vector<long long> w(n), h(m);
    for (long long i = 0; i < n; i++) {
      long long mn = a[i][0];
      for (long long j = 1; j < m; j++) mn += (a[i][j]);
      w[i] = mn;
    }
    for (long long i = 0; i < m; i++) {
      long long mn = a[0][i];
      for (long long j = 1; j < n; j++) mn += (a[j][i]);
      h[i] = mn;
    }
    long long mx = 0, mx_id = 0;
    for (long long i = 0; i < n; i++)
      if (w[i] > w[mx_id]) mx_id = i;
    mx = w[mx_id];
    long long mx2 = 0, mx_id2 = 0;
    for (long long i = 0; i < m; i++)
      if (h[i] > h[mx_id2]) mx_id2 = i;
    mx2 = h[mx_id2];
    if (mx > mx2) {
      for (long long j = 0; j < m; j++) a[mx_id][j] = 0;
    } else {
      for (long long j = 0; j < n; j++) a[j][mx_id2] = 0;
    }
    sum += max(mx2, mx);
  }
  return max(sum, sum2);
}
pair<long long, vector<int>> solve_bad(int n, int m,
                                       vector<vector<long long>> a,
                                       int step = 0) {
  if (step == 4) return {0, {}};
  auto copy = a;
  vector<int> rs;
  long long res = 0;
  for (int i = 0; i < n; i++) {
    long long sum = 0;
    for (int j = 0; j < m; j++) sum += a[i][j], copy[i][j] = 0;
    auto ee = solve_bad(n, m, copy, step + 1);
    long long sum2 = sum + ee.first;
    for (int j = 0; j < m; j++) copy[i][j] = a[i][j];
    if (sum2 > res) rs = ee.second, rs.push_back(i);
    res = max(res, sum2);
  }
  for (int i = 0; i < m; i++) {
    if (step == 0 && i == 1) {
      step = step;
    }
    if (step == 1 && i == 4) {
      step = step;
    }
    if (step == 2 && i == 2) {
      step = step;
    }
    if (step == 3 && i == 0) {
      step = step;
    }
    long long sum = 0;
    for (int j = 0; j < n; j++) sum += a[j][i], copy[j][i] = 0;
    auto ee = solve_bad(n, m, copy, step + 1);
    long long sum2 = sum + ee.first;
    for (int j = 0; j < n; j++) copy[j][i] = a[j][i];
    if (sum2 > res) rs = ee.second, rs.push_back(-i);
    res = max(res, sum2);
  }
  return {res, rs};
}
int main3() {
  long long n = 5, m = 5;
  vector<vector<long long>> a(n, vector<long long>(m));
  srand(1e3 + 1);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) a[i][j] = abs(rand() % 10);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) a[i][j] = abs(rand() % 10);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) a[i][j] = abs(rand() % 10);
  while (true) {
    for (int i = 0; i < n; i++)
      for (int j = 0; j < m; j++) a[i][j] = abs(rand() % 100);
    long long w = solve(n, m, a);
    auto z = solve_bad(n, m, a);
    for (auto e : z.second) cout << e << " ";
    cout << w << " " << z.first << endl;
    if (w != z.first) {
      for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) cout << a[i][j] << " ";
        cout << endl;
      }
    }
  }
  return -1;
}
int mai2n() {
  long long n = 5, m = 5;
  cin >> n >> m;
  vector<vector<long long>> a(n, vector<long long>(m));
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) cin >> a[i][j];
  auto e = solve_bad(n, m, a);
  for (auto z : e.second) cout << z << " ";
  cout << e.first;
  cin >> a[0][0];
  return -2;
}
int main() {
  long long n = 5, m = 5;
  cin >> n >> m;
  vector<vector<long long>> a(n, vector<long long>(m));
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) cin >> a[i][j];
  cout << solve(n, m, a);
  cin >> a[0][0];
}
