//d[i][j]:下
//u[i][j]:上
//左边d[i][j-1]+a[i][j]/////u[i][j-1]+a[i][j]
//上面d[i-1][j]+a[i][j]
//下面u[i+1][j]+a[i][j]
#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[1001][1001],d[1001][1001],u[1001][1001];
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>a[i][j];
}
}
for(int i=0;i<1000;i++){
for(int j=0;j<1000;j++){
d[i][j]=LLONG_MIN;
u[i][j]=LLONG_MIN;
}
}
d[0][0]=a[0][0];
u[0][0]=a[0][0];
for(int j=0;j<m;j++){
for(int i=0;i<n;i++){
//左
if(j>0){
if(max(d[i][j-1],u[i][j-1])!=LLONG_MIN){
d[i][j]=max(d[i][j],max(d[i][j-1],u[i][j-1])+a[i][j]);
u[i][j]=max(u[i][j],max(d[i][j-1],u[i][j-1])+a[i][j]);
}
}
//上
if(i>0&&d[i-1][j]!=LLONG_MIN){
d[i][j]=max(d[i][j],d[i-1][j]+a[i][j]);
}
}//下
for(int i=n-2;i>=0;i--){
if(i<n-1&&u[i+1][j]!=LLONG_MIN){
u[i][j]=max(u[i][j],u[i+1][j]+a[i][j]);
}
}
}
cout<<max(d[n-1][m-1],u[n-1][m-1])<<endl;
return 0;
}