/*
TASK: apple
LANG: C++
*/
#include <iostream>
#include <vector>
#include <string>
using namespace std;

#define MAXN 1000
#define MAXM 1000

int m,n;

struct P {
    int i,j;       
};

int arr[MAXM][MAXN];
int mas[MAXM][MAXN];
P parent[MAXM][MAXN];

int main() {
    int i,j;
    cin>>m>>n;
    for(j=0;j<m;j++) {
        for(i=0;i<n;i++) {
            cin>>arr[j][i];                 
        }                 
    }
    P start;
    start.i=-1;
    start.j=-1;
    parent[0][0]=start;
    int tmp;
    for(j=0;j<m;j++) {
        for(i=0;i<n;i++) {
            tmp=0;
            bool b1=false,b2=false;        
            if(i>0){if(mas[j][i-1]>tmp){tmp=mas[j][i-1];b1=true;}}
            if(j>0){if(mas[j-1][i]>tmp){tmp=mas[j-1][i];b2=true;}}
            mas[j][i]=arr[j][i]+tmp;
            if(b2) {
                parent[j][i].i=i;
                parent[j][i].j=j-1;       
            }
            else {
                parent[j][i].i=i-1;
                parent[j][i].j=j;     
            }
        }                 
    }
    //for(j=0;j<m;j++) {
    //    for(i=0;i<n;i++) {
    //        cout<<mas[j][i]<<" ";                 
    //    }                 
    //    cout<<endl;
    //}
    int best=-1;
    P bestp;
    for(j=0;j<m;j++) {
        for(i=0;i<n;i++) {
            if(mas[j][i]>best) {
                best=mas[j][i];
                bestp.i=i;
                bestp.j=j;                   
            }                 
        }                 
    }
    int ret = max(0,best);
    //cout<<best<<" "<<bestp.i<<" "<<bestp.j<<endl;
    P par=bestp;
    while(par.i!=-1) {
        //cout<<par.j<<" "<<par.i<<endl;
        arr[par.j][par.i]=0;
        par = parent[par.j][par.i];                 
    }
    //cout<<endl;
    //for(j=0;j<m;j++) {
    //    for(i=0;i<n;i++) {
    //        cout<<arr[j][i]<<" ";             
    //    }                 
    //    cout<<endl;
    //}



    start.i=-1;
    start.j=-1;
    parent[0][0]=start;
    for(j=0;j<m;j++) {
        for(i=0;i<n;i++) {
            tmp=0;
            bool b1=false,b2=false;        
            if(i>0){if(mas[j][i-1]>tmp){tmp=mas[j][i-1];b1=true;}}
            if(j>0){if(mas[j-1][i]>tmp){tmp=mas[j-1][i];b2=true;}}
            mas[j][i]=arr[j][i]+tmp;
            if(b2) {
                parent[j][i].i=i;
                parent[j][i].j=j-1;       
            }
            else {
                parent[j][i].i=i-1;
                parent[j][i].j=j;     
            }
        }                 
    }
    //for(j=0;j<m;j++) {
    //    for(i=0;i<n;i++) {
    //        cout<<mas[j][i]<<" ";                 
    //    }                 
    //    cout<<endl;
    //}
    best=-1;
    for(j=0;j<m;j++) {
        for(i=0;i<n;i++) {
            if(mas[j][i]>best) {
                best=mas[j][i];                   
            }                 
        }                 
    }
    ret += max(0,best);
    cout<<ret<<endl;
   // cin>>i;
   return 0;
}









