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

#define MAX_N     2000
#define MAX_PRICE 2000000000L

using namespace std;

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

  vector<int> &Sol = *(new vector<int>(A.size()));

  map<int, int> M;

  for (int i=0;i<A.size()+k;i++) {
    if (i<A.size())
      M[A[i]]++;
    if (i > 2*k) {
      M[A[i-2*k-1]]--;
      if (M[A[i-2*k-1]] == 0)
	M.erase(A[i-2*k-1]);
    }
    if (i >= k)
      Sol[i-k] = M.begin()->first;
  }

  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), Sol[MAX_N];

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

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

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

  for (int i=0;i<n;i++)
    Sol[i] = RBTreeMin(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);
}
