#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
typedef pair<string,int> P;
string b[500]; //レシピ情報

ll decode(string s)
{
	ll ret=0;
	for(int i=0;i<s.size();i++)
	{
		if(s[i]=='1')
			ret+=(1LL<<(ll)i);
	}
	return ret;
}

string strxor(string lhs,string rhs)
{
	int i=0;
	string ret;
	if(lhs.size()<rhs.size())
	{
		while(i<lhs.size())
		{
			if(lhs[i]==rhs[i])
				ret+='0';
			else
				ret+='1';
			i++;
		}
		while(i<rhs.size())
		{
			ret+=rhs[i];
			i++;
		}
	}else{
		while(i<rhs.size())
		{
			if(lhs[i]==rhs[i])
				ret+='0';
			else
				ret+='1';
			i++;
		}
		while(i<lhs.size())
		{
			ret+=lhs[i];
			i++;
		}
	}
	return ret;
}

vector<P> rekkyo(int l,int r)
{
	vector<P> ret;
	ret.push_back(P(string(b[0].size(),'0'),0));
	int cnt=r-l;
	for(int bit=0;bit<(1<<cnt);bit++)
	{
		auto ele=P("",0);
		for(int i=0;i<cnt;i++)
		{
			int tmp=(bit&(1<<i));
			if(tmp)
			{
				ele.second++;
				ele.first=strxor(ele.first,b[l+i]);
			}
		}
		ret.push_back(ele);
	}
	return ret;
}

int zen(int n,int m)
{
	//cerr<<string(b[0].size(),'0')<<endl;
	int ret=0;
	int cnt=0;
	vector<P> llist=rekkyo(0,n/2);
	vector<P> rlist=rekkyo(n/2,n);
	sort(rlist.begin(),rlist.end());
	for(int i=0;i<llist.size();i++)
	{
		auto itr=upper_bound(rlist.begin(),rlist.end(),P(llist[i].first,99999));
		if(itr==rlist.begin())
			continue;
		itr--;
		if((*itr).first==llist[i].first)
			ret=max(ret,llist[i].second+(*itr).second);
	}
	return ret;
}

int dp[2][1<<21];//n>=23ならm<=21
//dp[i][j]...i番目までで材料bit jを&1個にできるようなレシピの最大数
int solvedp(int n,int m)
{
	int ret=0;
	fill(dp[0],dp[2],-99999);
	dp[0][0]=0;//何も作らない場合
	for(int i=1;i<n+1;i++)
	{
		int bb=decode(b[i-1]);//数字にデコード
		//cerr<<bitset<8>(bb)<<endl;
		//今の状態に前の状態を移す
		for(int j=0;j<(1<<m);j++)
			dp[i&1][j]=dp[(i+1)&1][j];
		for(int j=0;j<(1<<m);j++)
		{
			if(dp[(i+1)&1][j]>=0)
				dp[i&1][j^bb]=max(dp[i&1][j^bb],dp[(i+1)&1][j]+1);
		}
		//前のdpテーブルの初期化
		for(int j=0;j<(1<<m);j++)
			dp[(i+1)&1][j]=-99999;
	}
	int ind=(n&1);
	ret=max(ret,dp[ind][0]);
	return ret;
}

int main()
{
	while(1)
	{
		int n,m;
		int ans=0;
		cin>>n>>m;
		if(n==0 && m==0)
			break;
		for(int i=0;i<n;i++)
			cin>>b[i];
		//nが十分小さいなら全探索
		if(n<23)
			ans=zen(n,m);
		else
			ans=solvedp(n,m); //そうでないならbitDP
		cout<<ans<<endl;
	}
	return 0;
}
