#include <bits/stdc++.h>
using namespace std;
#define fastio ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define ll long long
#define rep(i, a, b) for (int i = (a); i < (b); ++i)
#define repr(i, a, b) for (int i = (a); i > (b); --i)
void solve() {
ll n, m;
cin >> n >> m;
vector<string> a(n);
rep(i, 0, n) {
cin >> a[i];
}
ll b[m];
memset(b, -1, sizeof(b));
ll ans = 0;
set<int>st;
rep(i, 0, n) {
string x = a[i];
for (int j = 0; j < m; j++) {
if(x[j]=='?'){
continue;
}
if(b[j]==-1){
b[j] = x[j] - 'a';
}else{
if(b[j]!=x[j]-'a' && !st.count(j)){
ans++;
st.insert(j);
}
}
}
}
cout << ans << endl;
}
int main() {
fastio;
solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGZhc3RpbyBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgcmVwKGksIGEsIGIpIGZvciAoaW50IGkgPSAoYSk7IGkgPCAoYik7ICsraSkKI2RlZmluZSByZXByKGksIGEsIGIpIGZvciAoaW50IGkgPSAoYSk7IGkgPiAoYik7IC0taSkKCnZvaWQgc29sdmUoKSB7CiAgICBsbCBuLCBtOwogICAgY2luID4+IG4gPj4gbTsKICAgIHZlY3RvcjxzdHJpbmc+IGEobik7CgogICAgcmVwKGksIDAsIG4pIHsKICAgICAgICBjaW4gPj4gYVtpXTsKICAgIH0KCiAgICBsbCBiW21dOwogICAgbWVtc2V0KGIsIC0xLCBzaXplb2YoYikpOwoKICAgIGxsIGFucyA9IDA7CiAgICBzZXQ8aW50PnN0OwogICAgcmVwKGksIDAsIG4pIHsKICAgICAgICBzdHJpbmcgeCA9IGFbaV07CgogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbTsgaisrKSB7CiAgICAgICAgICAgIGlmKHhbal09PSc/Jyl7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZihiW2pdPT0tMSl7CiAgICAgICAgICAgICAgICBiW2pdID0geFtqXSAtICdhJzsKICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICBpZihiW2pdIT14W2pdLSdhJyAmJiAhc3QuY291bnQoaikpewogICAgICAgICAgICAgICAgICAgIGFucysrOwogICAgICAgICAgICAgICAgICAgIHN0Lmluc2VydChqKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBjb3V0IDw8IGFucyA8PCBlbmRsOwp9CgppbnQgbWFpbigpIHsKICAgIGZhc3RpbzsKICAgIHNvbHZlKCk7CiAgICByZXR1cm4gMDsKfQ==