#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int dp1[1010][1010],dp2[1010][1010],dp3[1010][1010],dp4[1010][1010];
int ans[1010][1010];
//(1,1)->(i,j)+(i,j)->(n,m)+(n,1)->(i,j)+(i,j)->(1,m);
int main(){
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            scanf("%d",&ans[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])+ans[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])+ans[i][j];
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=m;j>=1;j--){
            dp3[i][j]=max(dp3[i-1][j],dp3[i][j+1])+ans[i][j];
        }
    }
    for(int i=n;i>=1;i--){
        for(int j=1;j<=m;j++){
            dp4[i][j]=max(dp4[i][j-1],dp4[i+1][j])+ans[i][j];
        }
    }
    int cnt=0;
    for(int i=2;i<n;i++){
        for(int j=2;j<m;j++){
            cnt=max(cnt,dp1[i-1][j]+dp2[i+1][j]+dp3[i][j+1]+dp4[i][j-1]);
            cnt=max(cnt,dp1[i][j-1]+dp2[i][j+1]+dp3[i-1][j]+dp4[i+1][j]);
        }
    }
    printf("%d\n",cnt);
    return 0;
}