#include<bits/stdc++.h>
using namespace std;
const int MAXN=2003;
const long long int INF=20000000000000000;
int n,m;
long long int ans;
long long int a[MAXN][MAXN];
long long int dp1[MAXN][MAXN],dp2[MAXN][MAXN];
long long int pre_sum[MAXN][MAXN];
int main(){
freopen("partition.in","r",stdin);
freopen("partition.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>a[i][j];
ans+=a[i][j];
}
for(int i=n;i>=1;i--)
for(int j=1;j<=m;j++)
pre_sum[i][j]+=pre_sum[i+1][j]+a[i][j];
for(int i=0;i<MAXN;i++){
for(int j=0;j<=MAXN;j++){
dp1[i][j]=-INF;
dp2[i][j]=-INF;
}
}
dp1[0][m+1]=dp2[0][1]=0;
for(int i=1;i<=n+1;i++){
for(int j=1;j<=m+1;j++){
dp2[i][j]=max(dp2[i-1][j],dp2[i][j-1]+pre_sum[i][j-1]);
}
for(int j=m+1;j>=1;j--){
dp1[i][j]=max(dp1[i-1][j],dp1[i][j+1]+pre_sum[i][j]);
}
}
ans+=dp1[n+1][1]+dp2[n+1][m+1]*2;
printf("%lld",ans);
return 0;
}