#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <queue>
#include <algorithm>
#include <map>
#include <cmath>
#include <iomanip>
#define INF 99999999
#define MAX 100000
#define INF 100000000
using namespace std;
int dp[110][110];
int a[110][110];
int to[4][2]={1,0,-1,0,0,1,0,-1};
int n,k;
int check(int x,int y)
{
if(x<1 || y<1 || x>n || y>n)
return 1;
return 0;
}
int dfs(int x,int y)
{
int i,j,l,ans=0;
if(!dp[x][y])
{
for(int i=1;i<=k;i++)
{
for(int j=0;j<4;j++)
{
int xx=x+to[j][0]*i;
int yy=y+to[j][1]*i;
if(check(xx,yy))
continue;
if(a[xx][yy]>a[x][y])
{
ans=max(ans,dfs(xx,yy));
}
}
}
dp[x][y]=ans+a[x][y];
}
return dp[x][y];
}
int main()
{
int i,j;
while(scanf("%d%d",&n,&k),n>0&&k>0)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
memset(dp,0,sizeof(dp));
cout<<dfs(1,1)<<endl;
}
}
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <queue>
#include <algorithm>
#include <map>
#include <cmath>
#include <iomanip>
#define INF 99999999
#define MAX 100000
#define INF 100000000
using namespace std;
int dp[110][110];
int a[110][110];
int to[4][2]={1,0,-1,0,0,1,0,-1};
int n,k;
int check(int x,int y)
{
if(x<1 || y<1 || x>n || y>n)
return 1;
return 0;
}
int dfs(int x,int y)
{
int i,j,l,ans=0;
if(!dp[x][y])
{
for(int i=1;i<=k;i++)
{
for(int j=0;j<4;j++)
{
int xx=x+to[j][0]*i;
int yy=y+to[j][1]*i;
if(check(xx,yy))
continue;
if(a[xx][yy]>a[x][y])
{
ans=max(ans,dfs(xx,yy));
}
}
}
dp[x][y]=ans+a[x][y];
}
return dp[x][y];
}
int main()
{
int i,j;
while(scanf("%d%d",&n,&k),n>0&&k>0)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
memset(dp,0,sizeof(dp));
cout<<dfs(1,1)<<endl;
}
}