# https://yukicoder.me/problems/no/3710 def main(): N, M = map(int, input().split()) patterns = [] for _ in range(N): S = [] for _ in range(M): S.append(input()) patterns.append(S) # 回転も含めたものを入れる patterns2 = [] for S in patterns: p = [] for _ in range(4): new_S = [["" for _ in range(M)] for _ in range(M)] for h in range(M): for w in range(M): new_S[w][M - 1 - h] = S[h][w] p.append(new_S) S = new_S patterns2.append(p) # 答え合わせ answer = float("inf") for bit in range(4 ** N): index_list = [0] * N for i in range(N): index_list[i] = bit % 4 bit //= 4 ans = 0 for h in range(M): for w in range(M): base = 0 for i, o in enumerate(index_list): p = patterns2[i][o][h][w] if p == "#": base |= 1 ans += base answer = min(answer,ans) print(answer) if __name__ == "__main__": main()