#include<bits/stdc++.h>
using namespace std;
int m,n,maxx,a[101][20005],i,j;
int main() {
cin>>m>>n; //m行 n列 m=5,n=10
for(i=1; i<=m; i++)
for(j=1; j<=n; j++)
cin>>a[i][j];
//----------输入---------------------------
for(j=2; j<=n; j++) {
maxx=0;
for(i=1; i<=m; i++) {
if(a[i][j-1]>maxx) maxx=a[i][j-1];
}
for(i=1;i<=m;i++)
a[i][j]+=maxx;
}
//-----------核心哪,真的好难懂-------------
maxx=0;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++){
if(a[i][j]>maxx) maxx=a[i][j];
}
cout<<maxx;
return 0;
}
//哇,我的天哪,刚刚好可怕
/*当j等于2的时候
哦,我真的懂了,原来是替换,
就是把第一次的最大值加到第二个里面。
最后在比较最后一列那个最大,就输出那个最大的,
ok好开心,等下再写一遍啊
![](https://images2018.cnblogs.com/blog/1454793/201808/1454793-20180807204757523-138636902.jpg)