#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1010;
long long a[MAXN][MAXN], d1[MAXN][MAXN], d2[MAXN][MAXN], d3[MAXN][MAXN],
    d4[MAXN][MAXN];
int main() {
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) {
      cin >> a[i][j];
    }
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) {
      d1[i][j] = max((i ? d1[i - 1][j] : 0), (j ? d1[i][j - 1] : 0)) + a[i][j];
    }
  for (int i = n - 1; i >= 0; i--)
    for (int j = 0; j < m; j++) {
      d2[i][j] =
          max((i < n - 1 ? d2[i + 1][j] : 0), (j ? d2[i][j - 1] : 0)) + a[i][j];
    }
  for (int i = 0; i < n; i++)
    for (int j = m - 1; j >= 0; j--) {
      d3[i][j] =
          max((i ? d3[i - 1][j] : 0), (j < m - 1 ? d3[i][j + 1] : 0)) + a[i][j];
    }
  for (int i = n - 1; i >= 0; i--)
    for (int j = m - 1; j >= 0; j--) {
      d4[i][j] =
          max((i < n - 1 ? d4[i + 1][j] : 0), (j < m - 1 ? d4[i][j + 1] : 0)) +
          a[i][j];
    }
  long long ans = 0;
  for (int i = 1; i < n - 1; i++)
    for (int j = 1; j < m - 1; j++) {
      ans = max(
          d1[i][j - 1] + d2[i + 1][j] + d3[i - 1][j] + d4[i][j + 1],
          max(d1[i - 1][j] + d2[i][j - 1] + d3[i][j + 1] + d4[i + 1][j], ans));
    }
  cout << ans;
}
