/*
TASK: apple
LANG: C++
*/
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
    int i,j,A[70][70],D[70][70],R,C;
    int pred[70][70][2];
    int x,y,f;
    int ans=0;
    scanf("%d %d",&R,&C);
    for(i=0;i<R;i++)
        for(j=0;j<C;j++)scanf("%d",&A[i][j]);
    D[0][0]=A[0][0];
    for(i=1;i<C;i++)
    {
        D[0][i]=D[0][i-1]+A[0][i];pred[0][i][0]=0;pred[0][i][1]=i-1;
    }
    for(i=1;i<R;i++)
    {
        D[i][0]=D[i-1][0]+A[i][0];pred[i][0][0]=i-1;pred[i][0][1]=0;
    }
    for(i=1;i<R;i++)
        for(j=1;j<C;j++)
        {
            D[i][j]=max(D[i-1][j],D[i][j-1]);
            if(D[i][j]==D[i][j-1]){pred[i][j][0]=i;pred[i][j][1]=j-1;}
            if(D[i][j]==D[i-1][j]){pred[i][j][0]=i-1;pred[i][j][1]=j;}
            D[i][j]+=A[i][j];
        }
    /*for(i=0;i<R;i++,printf("\n"))
        for(j=0;j<C;j++)printf("%d ",D[i][j]);*/
    x=R-1;y=C-1;
    ans=D[x][y];
    while(1)
    {
        A[x][y]=0;
        //printf("%d %d\n",x,y);
        if(x==0&&y==0)break;
        f=x;
        x=pred[x][y][0];y=pred[f][y][1];
    }
    D[0][0]=A[0][0];
    for(i=1;i<C;i++)D[0][i]=D[0][i-1]+A[0][i];
    for(i=1;i<R;i++)D[i][0]=D[i-1][0]+A[i][0];
    for(i=1;i<R;i++)
        for(j=1;j<C;j++)D[i][j]=max(D[i-1][j],D[i][j-1])+A[i][j];
    /*for(i=0;i<R;i++,printf("\n"))
        for(j=0;j<C;j++)printf("%d ",D[i][j]);*/
    ans+=D[R-1][C-1];
    printf("%d\n",ans);
    return 0;
}
