#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int a[1005][1005];
long long dp1[1005][1005];
long long dp2[1005][1005];
long long ans[1005][1005];
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++) dp1[0][i]=dp2[n+1][i]=-2147483647ll*2147483647;
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j];
for(int j=1;j<=m;j++)
{
for(int i=1;i<=n;i++) dp1[i][j]=max(dp1[i-1][j],ans[i][j-1])+a[i][j];
for(int i=n;i>=1;i--) dp2[i][j]=max(dp2[i+1][j],ans[i][j-1])+a[i][j];
for(int i=1;i<=n;i++) ans[i][j]=max(dp1[i][j],dp2[i][j]);
}
/*for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++) cout<<'{'<<dp1[i][j]<<','<<dp2[i][j]<<','<<ans[i][j]<<'}'<<' ';
cout<<endl;
}*/
cout<<ans[n][m];
return 0;
}
打注释的是调试用的