#include using namespace std; typedef long long ll; template bool chmax(T& a, U b) { if (a < b) { a = b; return true; } else { return false; } } template bool chmin(T& a, U b) { if (a > b) { a = b; return true; } else { return false; } } vector rot(vector s, int h, int w) { vector res(h); for (int i = 0; i < h; ++i) { res[i].resize(w); } for (int i = 0; i < h; ++i) { for (int j = 0; j < w; ++j) { res[i][j] = s[w - j - 1][i]; } } return res; } int main() { ll n, m; cin >> n >> m; vector> s(n, vector(m)); for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { cin >> s[i][j]; } vector max = s[i]; for (int j = 0; j < 3; ++j) { s[i] = rot(s[i], m, m); chmax(max, s[i]); } s[i] = max; } ll ans = m * m; vector> grid(m, vector(m, 0)); auto f = [&](auto && self, ll cur) -> void { if (cur == n) { ll ca = 0; for (int i = 0; i < m; ++i) { for (int j = 0; j < m; ++j) { if (grid[i][j] != 0) ca++; } } chmin(ans, ca); } else { for (int i = 0; i < 1; ++i) { for (int j = 0; j < m; ++j) { for (int k = 0; k < m; ++k) { if (s[cur][j][k] == '#') grid[j][k]++; } } self(self, cur + 1); for (int j = 0; j < m; ++j) { for (int k = 0; k < m; ++k) { if (s[cur][j][k] == '#') grid[j][k]--; } } } } }; f(f, 0); cout << ans << endl; }