#include <stdio.h>
#include <vector>

#define MAX_N     2000
#define MAX_PRICE 2000000000L

using namespace std;

int Prefix[MAX_N*2], Suffix[MAX_N*2];

vector<int>& LinearMin(vector<int> &A, int k) {

  vector<int> &Sol = *(new vector<int>(A.size()));
  
  for (int i=0;i<A.size();i++) 
    Suffix[i] = (i%(2*k+1)==0)?A[i]:min(Suffix[i-1], A[i]);
  
  Prefix[A.size()-1] = A[A.size()-1];
  for (int i=A.size()-2;i>=0;i--)
    Prefix[i] = ((i+1)%(2*k+1)==0)?A[i]:min(Prefix[i+1], A[i]);
  
  for (int i=0;i<A.size();i++)
    Sol[i] = min((i-k>=0)?Prefix[i-k]:Suffix[i],(i+k<A.size())?Suffix[i+k]:Prefix[i]);
  
  return Sol;
}

int main() {
  FILE *fin, *fout;

  fin = fopen("spider.in", "r");
  fout = fopen("spider.out", "w");
  
  int n, k;  
  fscanf(fin, "%d %d", &n, &k);
  vector<int> A(n+k), Sol[MAX_N];

  for (int j=0;j<n;j++) {

    for (int i=0;i<n;i++) 
      fscanf(fin, "%d", &A[i]);
    for (int i=0;i<k;i++)
      A[i+n] = MAX_PRICE;

    vector<int> LineSol = LinearMin(A, k);
    for (int i=0;i<n;i++) 
      Sol[i].push_back(LineSol[i]);
  }

  for (int i=0;i<n;i++) {
    for (int j=0;j<k;j++)
      Sol[i].push_back(MAX_PRICE);
    Sol[i] = LinearMin(Sol[i], k);
  }
    
  for (int j=0;j<n;j++) {
    for (int i=0;i<n;i++) 
      fprintf(fout, "%d ", Sol[i][j]);
    fprintf(fout, "\n");
  }
  fclose(fin);
  fclose(fout);
}
