#include<bits/stdc++.h>
using namespace std;
#define int long long
#define N 1100
int n,m,a[N][N],sum[N][N],dp[N][N][5],r[N][N],c[N][N],row[N],col[N],ans;
int solve(int a,int b,int c,int d){
if(c>=n+1||d>=n+1){
return 0;
}
return sum[c][d]-sum[a-1][d]-sum[c][b-1]+sum[a-1][b-1];
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
sum[i][j]=a[i][j]+sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
dp[i][j][1]=max(dp[i][j-1][1],max(dp[i-1][j][1],solve(i-m+1,j-m+1,i,j)));
}
}
for(int i=1;i<=n;i++){
for(int j=n;j>=1;j--){
dp[i][j][2]=max(dp[i][j+1][2],max(dp[i-1][j][2],solve(i-m+1,j,i,j+m-1)));
}
}
for(int i=n;i>=1;i--){
for(int j=1;j<=n;j++){
dp[i][j][3]=max(dp[i][j-1][3],max(dp[i+1][j][3],solve(i,j-m+1,i+m-1,j)));
}
}
for(int i=n;i>=1;i--){
for(int j=n;j>=1;j--){
dp[i][j][4]=max(dp[i][j+1][4],max(dp[i+1][j][4],solve(i,j,i+m-1,j+m-1)));
}
}
for(int i=1;i<=n-m+1;i++){
for(int j=1;j<=n-m+1;j++){
row[i]=max(row[i],solve(i,j,i+m-1,j+m-1));
col[j]=max(col[j],solve(i,j,i+m-1,j+m-1));
}
}
for(int i=1;i<=n-m+1;i++){
r[i][i+m-1]=row[i];
c[i][i+m-1]=col[i];
}
for(int i=m;i<=n-1;i++){
for(int j=1;j<=n-i;j++){
r[j][j+i]=max(r[j][j+i-1],r[j+1][j+i]);
c[j][j+i]=max(c[j][j+i-1],c[j+1][j+i]);
}
}
for(int i=1;i<=n-m+1;i++){
for(int j=1;j<=n-m+1;j++){
ans=max(ans,max(dp[i][j][1]+dp[i][j+1][2]+r[i+1][n],max(dp[i][j][1]+dp[i+1][j][3]+c[j+1][n],max(dp[i][j+1][2]+dp[i+1][j+1][4]+c[1][j],dp[i+1][j][3]+dp[i+1][j+1][4]+r[1][i]))));
}
}
for(int i=m;i<=n;i++){
for(int j=i+m;j<=n-m;j++){
ans=max(ans,r[1][i]+r[i+1][j]+r[j+1][n]);
}
}
for(int i=m;i<=n;i++){
for(int j=i+m;j<=n-m;j++){
ans=max(ans,c[1][i]+c[i+1][j]+c[j+1][n]);
}
}
cout<<ans<<endl;
return 0;
}
wa*6