/*
TASK:apple
LANG:C
*/

#include<stdio.h>
 int a[72][72],n,m;

 int F();

 int main()
 {
  int i,j;
  scanf("%d %d",&n,&m);
  for(i=0;i<n;i++)
   for(j=0;j<m;j++)
    scanf("%d",&a[i][j]);
  i=F();

  printf("%d\n",i);
 // scanf("%d %d",&n,&m);
  return 0;
 }

 int F()
 {
  int b[72][72],i,j,r=0,c[72][72],l,k=1000,i1,j1,i2,j2,r1;
  char path[72][72];
  for(i=1;i<=n;i++)
   for(j=1;j<=m;j++)
    {c[i][j]=b[i][j]=a[i-1][j-1];
    path[i][j]=2;}
  for(i=0;i<=n;i++)
  {b[i][0]=0; path[i][0]=2;}
  for(i=0;i<=m;i++)
  {b[0][i]=0; path[0][i]=2;}
  for(i=1;i<=n;i++)
   for(j=1;j<=m;j++)
    if(b[i-1][j]<b[i][j-1]){b[i][j]+=b[i][j-1]; path[i][j]=0;}
    else{
     if(b[i-1][j]>b[i][j-1]){b[i][j]+=b[i-1][j]; path[i][j]=1;}
      else {b[i][j]+=b[i-1][j]; path[i][j]=2;}
    }
  r=b[n][m];
  i=n; j=m;
  while(path[i][j]!=2)
  {
   //l=b[i][j];
   if(path[i][j]==1){l=b[i-1][j]-b[i][j-1]; i2=i; j2=j; c[i][j]=0; i--;}
   else {l=b[i][j-1]-b[i-1][j]; i2=i; j2=j; c[i][j]=0; j--;}
   if(k>l && i!=0 && j!=0){k=l;  j1=j2; i1=i2;} 
  }
  path[i1][j1]=!path[i1][j1];
  r1=r-k;
  c[i][j]=0;
  for(i=1;i<=n;i++)
   for(j=1;j<=m;j++)
    if(c[i-1][j]<c[i][j-1]){c[i][j]+=c[i][j-1];}
    else{
     if(c[i-1][j]>c[i][j-1]){c[i][j]+=c[i-1][j];}
      else {c[i][j]+=c[i-1][j];}
    }
  r+=c[n][m];    
  for(i=1;i<=n;i++)
   for(j=1;j<=m;j++)
    c[i][j]=a[i-1][j-1];
  i=n; j=m;
  while(path[i][j]!=2)
  {
   if(path[i][j]==1){c[i][j]=0; i--;}
   else {c[i][j]=0; j--;}
  }
  c[i][j]=0;
/*   for(i=0;i<=n;i++)
  {
   for(j=0;j<=m;j++)
    printf("%d ",c[i][j]);
   printf("\n");
  }*/
  for(i=1;i<=n;i++)
   for(j=1;j<=m;j++)
    if(c[i-1][j]<c[i][j-1]){c[i][j]+=c[i][j-1];}
    else{
     if(c[i-1][j]>c[i][j-1]){c[i][j]+=c[i-1][j];}
      else {c[i][j]+=c[i-1][j];}
    }
  r1+=c[n][m];
  return (r>r1)?r:r1;
 }
