#include <bits/stdc++.h>   using namespace std;   const int N = 1005;   int a[N][N];   int dp1[N][N] = {0}, dp2[N][N] = {0}, dp3[N][N] = {0}, dp4[N][N] = {0};   int main() {     int n, m;     cin >> n >> m;     for (int i = 1; i <= n; i++)       for (int j = 1; j <= m; j++) cin >> a[i][j];     for (int i = 1; i <= n; i++)       for (int j = 1; j <= m; j++) {         dp1[i][j] = max(dp1[i - 1][j], dp1[i][j - 1]) + a[i][j];       }     for (int i = n; i >= 1; i--)       for (int j = m; j >= 1; j--) {         dp2[i][j] = max(dp2[i + 1][j], dp2[i][j + 1]) + a[i][j];       }     for (int i = n; i >= 1; i--)       for (int j = 1; j <= m; j++) {         dp3[i][j] = max(dp3[i + 1][j], dp3[i][j - 1]) + a[i][j];       }     for (int i = 1; i <= n; i++)       for (int j = m; j >= 1; j--) {         dp4[i][j] = max(dp4[i - 1][j], dp4[i][j + 1]) + a[i][j];       }     int ans = 0;     for (int i = 2; i < n; i++)       for (int j = 2; j < m; j++) {         ans = max(dp1[i - 1][j] + dp2[i + 1][j] + dp3[i][j - 1] + dp4[i][j + 1],                   ans);         ans = max(dp1[i][j - 1] + dp2[i][j + 1] + dp3[i + 1][j] + dp4[i - 1][j],                   ans);       }     cout << ans << endl;     return 0;   }   