/*
TASK:apple
LANG:C++
*/
#include <stdio.h>
#include <iostream>
using namespace std;
struct pole
{
       int v,p;
};
int f[80][80];
pole a[80][80];
main()
{
      //read
      int n,m;
      scanf("%d%d",&n,&m);
      for (int i=1;i<=n;i++)
          for (int j=1;j<=m;j++)
              scanf("%d",&f[i][j]);
      //****
      
      //first trip
      a[1][1].v=f[1][1];
      a[1][1].p=-1;
      int maxi=1,maxj=1;
      for (int i=1;i<=n;i++)
          for (int j=1;j<=m;j++)
              {
                   if (a[i+1][j].v<=a[i][j].v+f[i+1][j]) 
                              {
                              a[i+1][j].v=a[i][j].v+f[i+1][j];
                              a[i+1][j].p=1;
                              if (a[i+1][j].v>a[maxi][maxj].v&&i+1<=n) {maxi=i+1;maxj=j;};
                              };
                   if (a[i][j+1].v<=a[i][j].v+f[i][j+1]) 
                              {
                              a[i][j+1].v=a[i][j].v+f[i][j+1];
                              a[i][j+1].p=0;
                              if (a[i][j+1].v>a[maxi][maxj].v&&j+1<=m) {maxi=i;maxj=j+1;};
                              };
                   
               };
      //****
      //get the apples
      long int sum=a[maxi][maxj].v;
      int i=maxi,j=maxj;
      while (a[i][j].p!=-1)
      {
            f[i][j]=0;
            if (a[i][j].p==1) i--;
            else j--;
      };
      f[1][1]=0;
      //******
      //second trip
      for (int i=1;i<=n;i++)
          for (int j=1;j<=m;j++) 
              {a[i][j].v=0;a[i][j].p=-1;};
      maxi=1,maxj=1;
      for (int i=1;i<=n;i++)
          for (int j=1;j<=m;j++)
              {
                   if (a[i+1][j].v<=a[i][j].v+f[i+1][j]) 
                              {
                              a[i+1][j].v=a[i][j].v+f[i+1][j];
                              a[i+1][j].p=1;
                              if (a[i+1][j].v>a[maxi][maxj].v&&i+1<=n) {maxi=i+1;maxj=j;};
                              };
                   if (a[i][j+1].v<=a[i][j].v+f[i][j+1]) 
                              {
                              a[i][j+1].v=a[i][j].v+f[i][j+1];
                              a[i][j+1].p=0;
                              if (a[i][j+1].v>a[maxi][maxj].v&&j+1<=m) {maxi=i;maxj=j+1;};
                              };
                   
               };
      //****
      sum=sum+a[maxi][maxj].v;
      cout<<sum<<endl;
      
      
      /*    {
               for (int j=1;j<=m;j++)
                   //cout<<a[i][j].v<<"|"<<a[i][j].p<<" ";
                   cout<<f[i][j]<<" ";
              cout<<endl;
          };
     */ 
}     

