Point: 100.0
Time limit: 1.0s
Memory limit: 640 M
Input: stdin
Output: stdout
Author:  
Problem type
Ngôn ngữ cho phép
C, C#, C++, Java, Pascal, Python, Text

Cho một bảng số gồm \(M\) hàng và \(N\) cột, hàng thứ \(i\) cột thứ \(j\) của bảng số gọi là ô \((i,j)\) có giá trị \(a_{ij}\). Một con ROBOT nếu đặt trên bảng số tại ô \((i,j)\) thì nó chỉ có thể đi đến ô \((i + 1,j)\) hoặc ô \((i,j + 1)\).

Yêu cầu

Giả sử đặt con ROBOT ban đầu tại ô \((1,1)\). Hãy tìm đường đi từ ô \((1,1)\) đến ô \((M,N)\) sao cho giá trị đường đi của ROBOT là lớn nhất. Giá trị của một đường đi là tổng các giá trị của các ô nằm trên đường đi đó (bao gồm cả ô \((1,1)\) và ô \((M,N)\)).

Dữ liệu

  • Dòng đầu gồm hai số nguyên dương \(M\)\(N\) \((M,N \leq 3000)\).
  • Trong \(M\) dòng tiếp theo, gồm \(N\) số nguyên \(a_{i1},a_{i2},....,a_{iN}\) \((|a_{ij}| \leq 100)\).

Kết quả

In ra giá trị của đường đi tìm được.

Ví dụ

INPUT

3 3
1 2 3
2 3 -4
-5 3 7

** OUTPUT **

16