#include <iostream>
#include <climits>
using namespace std;
#define int long long
const int MAXN = 3000 + 5;
int dp[MAXN][MAXN][2];
int n, m;
main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
int x, y;
cin >> x;
dp[i][j][0] = x;
}
}
bool zt = 0;
int len = 1;
while(len * 2 < m){
len *= 2;
int i = len;
for (int j = 1; j + i <= n + 1; j++) {
for (int k = 1; k <= n; k++) {
dp[j][k][1 - zt] = max(dp[j][k][1 - zt], dp[j + i / 2][k][zt]);
dp[j][k][1 - zt] = max(dp[j][k][1 - zt], dp[j + i / 2][k + i / 2][zt]);
dp[j][k][1 - zt] = max(dp[j][k][1 - zt], dp[j + i / 2][k + i / 4][zt]);
dp[j][k][1 - zt] = max(dp[j][k][1 - zt], dp[j + i / 4][k][zt]);
dp[j][k][1 - zt] = max(dp[j][k][1 - zt], dp[j + i / 4][k + i / 4][zt]);
dp[j][k][1 - zt] = max(dp[j][k][1 - zt], dp[j][k][zt]);
}
}
zt = 1 - zt;
}
int result = 0;
for (int i = 1; i + m <= n + 1; i++) {
for (int j = 1; j <= i; j++) {
int num = INT_MIN;
num = max(num, dp[i][j][zt]);
num = max(num, dp[i + m - len][j][zt]);
num = max(num, dp[i + m - len][j + m - len][zt]);
num = max(num, dp[i + (m - len) / 2][j][zt]);
num = max(num, dp[i + (m - len) / 2][j + (m - len) / 2][zt]);
num = max(num, dp[i + m - len][j + (m - len) / 2][zt]);
result += num;
}
}
cout << result << endl;
return 0;
}