#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
// 数据量很大,如果穷举必然超时完全没思路,翻了网友答案
// i,j列 如果构形完全相同 则能保证可以一起转变为全1,因此不同构型则互斥
// 因此答案就是最大相同【列构型】数量
// 这题一般情况下如果考试遇到,若没见过必挂
int main() {
    int n, m;
    cin >> n >> m;
    vector<string> data(n);
    for(auto& v : data) {
        cin >> v;
    }
    unordered_map<string,int> dict;
    for(auto j = 0; j < m; j++) {
        string str;
        for(auto i = 0; i < n; i++) {
            str += data[i][j];
        }
        dict[str]++;
    }
    int cnt = 0;
    for(auto & it : dict) {
        cnt = max(cnt, it.second);
    }
    cout << cnt << endl;
}
// 64 位输出请用 printf("%lld")