#include <cstdio>
#include <deque>
using namespace std;
typedef long long ll;
const int N = 3005;
ll f[N][N], a[N];
ll max(ll a, ll b) {
return a > b ? a : b;
}
int main() {
int n, k;
scanf("%d %d", &n, &k);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
scanf("%lld", &f[i][j]);
}
}
int p = 0;
while ((1 << p) <= k) {
p++;
}
p--;
for (int k = 1; k <= p; k++) {
for (int i = 1; i + (1 << k) - 1 <= n; i++) {
for (int j = 1; j <= i + (1 << (k - 1)); j++) {
a[j] = f[i + (1 << (k - 1))][j];
}
deque < int > q;
for (int j = 1; j <= (1 << (k - 1)); j++) {
while (!q.empty() && a[q.back()] <= a[j]) {
q.pop_back();
}
q.push_back(j);
}
for (int j = 1; j <= i; j++) {
while (!q.empty() && a[q.back()] <= a[j + (1 << (k - 1))]) {
q.pop_back();
}
q.push_back(j + (1 << (k - 1)));
while (q.front() < j) {
q.pop_front();
}
f[i][j] = max(f[i][j], a[q.front()]);
}
}
}
ll ans = 0;
for (int i = 1; i + k - 1 <= n; i++) {
for (int j = 1; j <= i + k - (1 << p); j++) {
a[j] = f[i + k - (1 << p)][j];
}
deque < int > q;
for (int j = 1; j <= k - (1 << p); j++) {
while (!q.empty() && a[q.back()] <= a[j]) {
q.pop_back();
}
q.push_back(j);
}
for (int j = 1; j <= i; j++) {
while (!q.empty() && a[q.back()] <= a[j + k - (1 << p)]) {
q.pop_back();
}
q.push_back(j + k - (1 << p));
while (q.front() < j) {
q.pop_front();
}
ans += max(f[i][j], a[q.front()]);
}
}
printf("%lld", ans);
return 0;
}