#include <bits/stdc++.h>
using namespace std;
int n,m;
 
int a[805][805];
 
int pre[805][805];
 
bool check(int x) {
	for(int i=1;i<=n;i++) {
		for(int j=1;j<=n;j++) {
			pre[i][j]=pre[i-1][j]+pre[i][j-1]-pre[i-1][j-1]+(a[i][j]<=x?-1:1);
		}
	}
	for(int i=m;i<=n;i++) {
		for(int j=m;j<=n;j++) {
			if(pre[i][j]-pre[i-m][j]-pre[i][j-m]+pre[i-m][j-m]<=0) {
				return 1;
			}
		}
	}
	return 0;
}
 
int main() {
	scanf("%d %d",&n,&m);
	for(int i=1;i<=n;i++) {
		for(int j=1;j<=n;j++) {
			scanf("%d",&a[i][j]);
		}
	}
	int l=0,r=1e9;
	while(l<r) {
		int mid=(l+r)>>1;
		if(check(mid)) {
			r=mid;
		}else {
			l=mid+1;
		}
	}
	printf("%d",r);
	return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main(){
  int N,M;  
  cin>>N>>M;
  int L=max(N,M);
  vector<int> A(N);
  vector<int> B(M);
  vector<int> C(N+M);

  for(int i=0;i<N;i++){cin>>C.at(i);}
  for(int i=0;i<M;i++){cin>>C.at(i+N);}


  sort(C.begin(),C.end());
  if(C.at(0)!=0&&C.at(0)!=C.at(1)) cout<<C.at(0)<<" ";
  for(int i=1; i<N+M-1;i++){
  	if(C.at(i)!=0&&C.at(i)!=C.at(i+1)&&C.at(i)!=C.at(i-1)) cout<<C.at(i)<<" ";
  }
  if(C.at(N+M-1)!=0&&C.at(N+M-1)!=C.at(N+M-2)) cout<<C.at(N+M-1)<<" ";
    
   
    
    
  return 0;
  
}