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