#include <bits/stdc++.h>
using namespace std;
string ltrim(const string &);
string rtrim(const string &);
vector<string> split(const string &);
// Complete the countSpecialElements function below.
int countSpecialElements(vector<vector<int>> matrix) {
int m=matrix.size();
int n=matrix[0].size();
int rowmax[m], rowmin[m];
int colmax[n], colmin[n];
// Find rminn and rmaxx for every row
for (int i = 0; i < m; i++) {
int rminn = INT_MAX;
int rmaxx = INT_MIN;
for (int j = 0; j < n; j++) {
if (matrix[i][j] > rmaxx)
rmaxx = matrix[i][j];
if (matrix[i][j] < rminn)
rminn = matrix[i][j];
}
rowmax[i] = rmaxx;
int count1=0;
for(int k=0;k<n;k++){
if(rowmax[i]==matrix[i][k])
count1++;
}
if(count1>1)
return -1;
count1=0;
rowmin[i] = rminn;
for(int k=0;k<n;k++){
if(rowmin[i]==matrix[i][k])
count1++;
}
if(count1>1)
return -1;
}
// Find cminn and cmaxx for every column
for (int j = 0; j < n; j++) {
int cminn = INT_MAX;
int cmaxx = INT_MIN;
for (int i = 0; i < m; i++) {
if (matrix[i][j] > cmaxx)
cmaxx = matrix[i][j];
if (matrix[i][j] < cminn)
cminn = matrix[i][j];
}
colmax[j] = cmaxx;
int count1=0;
for(int k=0;k<m;k++){
if(colmax[j]==matrix[k][j])
count1++;
}
if(count1>1)
return -1;
colmin[j] = cminn;
for(int k=0;k<m;k++){
if(colmin[j]==matrix[k][j])
count1++;
}
if(count1>1)
return -1;
}
// Check for optimal element
int count = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if ((matrix[i][j] == rowmax[i])
|| (matrix[i][j] == rowmin[i])
|| (matrix[i][j] == colmax[j])
|| (matrix[i][j] == colmin[j])) {
count++;
}
}
}
return count;
}
int main() {
int m,n,x;
cin>>m>>n;
vector<vector<int> > v(m,vector<int> (n));
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin>>x;
v[i][j]=x;
}
}
cout<<countSpecialElements(v);
return 0;
}