/*
TASK: apple
LANG: C++
*/

#include<iostream>
#include<algorithm>
using namespace std;
int i,j,n,m,r[71][71],a[72][72],sa[72][72],p[71][71];

void init(){

//	freopen("inp1.txt","rt",stdin);
    cin>>n>>m;
    //cout<<"n="<<n;
    for(i=1;i<=n;i++)
    	for(j=1;j<=m;j++){
        	cin>>a[i][j];
            sa[i][j]=a[i][j];
        }

}


int outd(){
	int ff[71][71];
    for(i=0;i<=n;i++)for(j=0;j<=m;j++)ff[i][j]=0;
    for(i=1;i<=n;i++)
    	for(j=1;j<=m;j++){
        	if(ff[i-1][j]>ff[i][j-1])p[i][j]=-1;
            else p[i][j]=1;

            ff[i][j]=max(ff[i-1][j],ff[i][j-1])+a[i][j];
        }
        int ans=0,p1,p2;

        
    for(i=1;i<=n;i++){
    	if(ff[i][m]>ans){p1=i;p2=m;}
    	ans=max(ans,ff[i][m]);
    }
    for(i=1;i<=m;i++){
    	if(ff[n][i]>ans){p1=n;p2=i;}
    	ans=max(ans,ff[n][i]);
    }

    
/*    for(i=0;i<=n;i++){
    	for(j=0;j<=m;j++)cout<<p[i][j]<<" ";
        cout<<endl;
    }*/
    //cout<<"p1="<<p1<<" p2="<<p2<<"\n";
    a[p1][p2]=0;
    while(p1!=0 && p2!=0){
    	if(p[p1][p2]==1)p2--;
        else p1--;
        //cout<<p1<<" "<<p2<<endl;
        a[p1][p2]=0;
    }

  /*  for(i=0;i<=n;i++){
    	for(j=0;j<=m;j++)cout<<a[i][j]<<" ";
        cout<<endl;
    }*/
    
    return ans;
}


int gr(){
	i=1;j=1;
    int ans=a[i][j];
	while(i<=n && j<=m){
    	a[i][j]=0;
    	if(a[i+1][j]>a[i][j+1]){
        	ans+=a[i+1][j];i++;
        }
        else {
        	ans+=a[i][j+1];j++;
        }
    }
  /*  for(i=0;i<=n;i++){
    	for(j=0;j<=m;j++)cout<<a[i][j]<<" ";
        cout<<endl;
    }*/
    return ans;
    
}

void solve(){
	int an1=0,an2=0;
    an1=outd();
    an1+=outd();
    for(i=1;i<=n;i++)
    	for(j=1;j<=m;j++)a[i][j]=sa[i][j];
    an2=gr();
    an2+=outd();
    int ans=max(an1,an2);
    cout<<ans<<endl;

}

int main(){
	init();
        //for(i=0;i<=n;i++)for(j=0;j<=m;j++)cout<<a[i][j]<<" ";
    solve();
    return 0;
}

