#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
****************************************************************/