#include<iostream>
#include<cstring>
using namespace std;
int max(int a,int b){
if(a>b)
return a;
else
return b;
}
int main(){
int n;//组数
int b[101][101];//花生地中的花生数
//初始化花生地
memset(b,0,sizeof(b));
int x,y;//花生地的行列
cin>>x>>y;//读入花生地的行列
//读入每块地种多少花生
//这里i和j从1开始,为的是下面判断i-1,j-1的时候边界值省得特殊处理
for(int i=1;i<=x;i++){
for(int j=1;j<=y;j++){
cin>>b[i][j];
}
}
//第推找最大值
for(int i=1;i<=x;i++){
for(int j=1;j<=y;j++){
//从上面过来划算,还是从左边过来划算
b[i][j]+=max(b[i-1][j],b[i][j-1]);
}
}
cout<<b[x][y];
}
/**************************************************************
Problem: 1298
User: admin
Language: C++
Result: Accepted
Time:8 ms
Memory:2072 kb
****************************************************************/