#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;
}