/*
TASK:apple
LANG:C++
*/
#include <iostream>
#include <vector>

using namespace std;

int bigger(int a, int b)
{
    if (a>b) return a;
    else return b;
};

int Data[70][70];
int Maxs[70][70];
int Path[70][70];
int DataB[70][70];

int path_fill(int y,int x)
{
    Path[y][x]=1;
    if (x==0 && y==0) return 0;
    if (x>0 && y>0)
    {
       if (Maxs[y][x-1]>Maxs[y-1][x])
           path_fill(y,x-1);
       else 
            path_fill(y-1,x);
    return 0;
    }  
    if (x>0) path_fill(y,x-1);
    else path_fill(y-1,x);
    return 0;    
};


int main()
{
    int M,N;
    cin>>M>>N;
    for(int i=0;i<M;i++)
    for(int j=0;j<N;j++)
    {
            cin>>Data[i][j];
            Maxs[i][j]=Data[i][j];
            Path[i][j]=0;
            DataB[i][j]=Data[i][j];
    }
    
    for(int i=1;i<M;i++)    Maxs[i][0] += Maxs[i-1][0];
    for(int i=1;i<N;i++)    Maxs[0][i] += Maxs[0][i-1];
    
    for(int i=1;i<M;i++)
    {
            for(int j=1;j<N;j++)
            {
                    Maxs[i][j]+=bigger(Maxs[i-1][j],Maxs[i][j-1]);
                    }
}

    int MaxA = Maxs[M-1][N-1];
    path_fill(M-1,N-1);

    for(int r=0 ; r<M ; r++)
    for(int c=0 ; c<N-1 ; c++)
            if(Path[r][c]==1)
            {
                             int y=r-1,x=c+1;
                             while(y>=0 && x<N)
                             {
                                Path[y][x]=1;
                                Path[y+1][x-1]=0;
                                DataB[y+1][x-1]=DataB[y][x];
                                y--;x++;
                             }

            }
  
    for(int i=0;i<M;i++)
    {
    for(int j=0;j<N;j++)
    cout<<DataB[i][j]<<" ";
cout<<endl;
}
  
    for(int i=2;i<M;i++)    DataB[i][0] += DataB[i-1][0];
    for(int i=1;i<N-1;i++)   DataB[1][i] += DataB[1][i-1];
    
    
    
    for(int i=2;i<M;i++){
            for(int j=1;j<N-1;j++)
            {
                    DataB[i][j]+=bigger(DataB[i-1][j],DataB[i][j-1]);
                    //cout<<DataB[i][j]<<" ";
            }
            //cout<<endl;
            }
    int MaxB = DataB[M-1][N-2];
    cout<<MaxA+MaxB<<endl;
    
    return 0;    
};
