#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;

template<typename T>
void input(T &x) {
	x=0; T a=1;
	register char c=getchar();
	for(;c<48||c>57;c=getchar())
		if(c==45) a=-1;
	for(;c>=48&&c<=57;c=getchar())
		x=x*10+c-48;
	x*=a;
	return;
}

int n,m;

namespace solve70 {
	
	const int N=310;
	const int M=310;
	int a[N][M],cnt[N],sum[N];
	bool go[M];

	bool Judge(int mid) {
		memset(go,0,sizeof(go));
		for(int i=1;i<=n;i++) cnt[i]=1;
		while(1) {
			memset(sum,0,sizeof(sum));
			bool flag=true;
			for(int i=1;i<=n;i++) {
				for(;cnt[i]<=m&&go[a[i][cnt[i]]];cnt[i]++);
				if(cnt[i]>m) return false;
				if(++sum[a[i][cnt[i]]]>mid)
					go[a[i][cnt[i]]]=true,flag=false;
			}
			if(flag) return true;
		}
		return false;
	}

	int main() {
		input(n),input(m);
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;++j)
				input(a[i][j]);
		int l=1,r=n;
		while(l<r) {
			int mid=l+r>>1;
			if(Judge(mid)) r=mid;
			else l=mid+1;
		}
		printf("%d\n",r);
		return 0;
	}

}

int main() { return solve70::main(); }
