#include <iostream>
#include <vector>
#include <algorithm>
#include <bitset>
using namespace std;

int main(){
	while(1){
		int n,m;
		cin >> n >> m;
		if(n == 0) break;

		vector<bitset<500> > r(n);
		for(int i=0; i<n; i++){
			cin >> r[i];
		}
		int ans = 0;
		if(n <= 23){
			for(int i=0; i<(1<<n); i++){
				int cnt = __builtin_popcount(i);
				if(cnt <= ans) continue;
				bitset<500> bxor;
				for(int j=0; j<n; j++){
					if(i>>j & 1){
						bxor ^= r[j];
					}
				}
				if(bxor.none()){
					ans = cnt;
				}
			}
		}else{
			vector<int> rr(n);
			for(int i=0; i<n; i++){
				rr[i] = r[i].to_ulong();
			}
			vector<int> maxnum(1<<m, -1);
			maxnum[0] = 0;
			for(int i=0; i<n; i++){
				vector<int> next = maxnum;
				for(int j=0; j<(1<<m); j++){
					if(maxnum[j] == -1) continue;
					next[j^rr[i]] = max(next[j^rr[i]], maxnum[j]+1);
				}
				maxnum = next;
			}
			ans = maxnum[0];
		}
		cout << ans << endl;
	}
	return 0;
}
