#include<bits/stdc++.h>
using namespace std;
#define int long long
#define maxn 1005
int n,k,tot,tt;
int a[maxn][maxn];
int vis[maxn][maxn];
int sum[maxn][maxn];
int you[maxn][maxn];
int num[maxn*maxn];
map<int,int>to,to1;
bool check(int x)
{
	memset(sum,0,sizeof(sum));
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(a[i][j]<=x) vis[i][j]=1;
			else vis[i][j]=0;
			sum[j][i]=sum[j][i-1]+vis[i][j];
			you[j][i]=you[j][i-1]+(a[i][j]==x);
		}
	}
//	for(int i=1;i<=n;i++)
//	{
//		for(int j=1;j<=n;j++)
//		cout<<vis[i][j]<<' ';
//		cout<<endl;
//	}
//	for(int j=1;j<=n;j++)
//	{
//		for(int i=1;i<=n;i++)
//		cout<<sum[j][i]<<' ';
//		cout<<endl;
//	}
	int ret=0;
	for(int i=k;i<=n;i++)
	{
		int ans=0;
		int yo=0;
		for(int p=1;p<=k;p++)
		{
			ans+=sum[p][i]-sum[p][i-k];
			yo+=you[p][i]-you[p][i-k];
		}
		if(ans>=(k*k-k*k/2)) return 1;
		int l=1;
		for(int j=k+1;j<=n;j++)
		{
			ans-=sum[l][i]-sum[l][i-k];
			yo-=you[l][i]-you[l][i-k];
			l++;
			ans+=sum[j][i]-sum[j][i-k];
			yo+=you[j][i]-you[j][i-k];
			if(ans>=(k*k-k*k/2)) return 1;
		}
	}
	return 0;
}
int ef(int l,int r)
{
	if(r-l>1)
	{
		int mid=(l+r)>>1;
		if(check(mid)) return ef(l,mid);
		return ef(mid,r);	
	}
	if(check(l)) return l;
	return r;
}
signed main()
{
	cin>>n>>k;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
		{
			cin>>a[i][j];
			num[++tt]=a[i][j];
		}
	sort(num+1,num+tt+1);
	for(int i=1;i<=tt;i++) if(!to[num[i]]) to[num[i]]=++tot,to1[tot]=num[i];
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			a[i][j]=to[a[i][j]];
	int l=1,r=tot;
//	for(int i=1;i<=tot;i++) if(check(i)) {cout<<to1[i];return 0;}
	cout<<to1[ef(l,r)];
//	if(check(l)) cout<<to1[l];
//	else cout<<to1[r];
	return 0;
}
#include <bits/stdc++.h>
using namespace std;

map<vector<int>, long long> dp;

long long gcd(long long x, long long y) {
  while (y) {
    long long t = x;
    x = y;
    y = t % y;
  }
  return x;
}

bool coprime[80][80];

long long f(vector<int> idxs) {
  if (idxs.size() == 0) return 1;
  if (dp.find(idxs) != dp.end()) return dp[idxs];
  long long ret = 1;
  for (int i = 0; i < idxs.size(); ++i) {
    vector<int> nidxs;
    for (int j = i + 1; j < idxs.size(); ++j) {
      if (coprime[idxs[i]][idxs[j]]) nidxs.push_back(idxs[j]);
    }
    ret += f(nidxs);
  }
  return dp[idxs] = ret;
}

int solve() {
  long long a, b;
  scanf("%lld %lld", &a, &b);
  vector<int> idxs(b - a + 1);
  for (int i = 0; i <= b - a; ++i) {
    for (int j = i + 1; j <= b - a; ++j) {
      coprime[i][j] = (gcd(a + i, a + j) == 1);
    }
    idxs[i] = i;
  }

  printf("%lld\n", f(idxs));
  return 0;
}

int main() {
  int t = 1;
  // scanf("%d", &t);
  for (int tc = 0; tc < t; ++tc) {
    solve();
  }
  return 0;
}
