#include #define REP(i, n) for (int i = 0; (i) < int(n); ++ (i)) #define REP3(i, m, n) for (int i = (m); (i) < int(n); ++ (i)) using namespace std; template auto vectors(X x, T a) { return vector(x, a); } template auto vectors(X x, Y y, Z z, Zs... zs) { auto cont = vectors(y, z, zs...); return vector(x, cont); } int main() { // input int n, m; cin >> n >> m; auto r = vectors(n, m, int()); REP (y, n) REP (x, m) cin >> r[y][x]; // solve vector max_r(m, INT_MIN); vector > argmax_r(m); REP (y, n) { bool used = false; REP (x, m) { if (max_r[x] < r[y][x]) { max_r[x] = r[y][x]; for (int y1 : argmax_r[x]) { REP3 (x1, x + 1, m) { if (max_r[x1] == r[y1][x1]) { argmax_r[x1].push_back(y1); break; } } } argmax_r[x].clear(); } if (max_r[x] == r[y][x]) { if (not used) { used = true; argmax_r[x].push_back(y); } } } // output int answer = 0; REP (x, m) { answer += argmax_r[x].size(); } cout << answer << endl; } return 0; }