#include <bits/stdc++.h>
using namespace std;
const int INF = INT_MAX;
const long long INFL = LLONG_MAX;
int N, M, ans;
bool is_white[510][510], dp[9][510][510][16];
int main() {
  ios_base::sync_with_stdio(0);
  cout.precision(15);
  cin >> N >> M;
  for (int(r) = 1; (r) <= (N); (r)++) {
    string s;
    cin >> s;
    for (int(c) = 1; (c) <= (M); (c)++) is_white[r][c] = s[c - 1] == '.';
  }
  for (int(r) = 1; (r) <= (N); (r)++)
    for (int(c) = 1; (c) <= (M); (c)++) {
      int t = 0;
      if (is_white[r][c]) t += 1 << 0;
      if (is_white[r][c + 1]) t += 1 << 1;
      if (is_white[r + 1][c]) t += 1 << 2;
      if (is_white[r + 1][c + 1]) t += 1 << 3;
      dp[1][r][c][t] = 1;
    }
  for (int(s) = 1; (s) <= (8); (s)++) {
    int ss = 1 << s;
    for (int(r) = 1; (r) <= (N - (ss << 1) + 1); (r)++)
      for (int(c) = 1; (c) <= (M - (ss << 1) + 1); (c)++)
        for (int(t) = 0; (t) < (16); (t)++) {
          dp[s + 1][r][c][t] = true;
          dp[s + 1][r][c][t] &= dp[s][r][c][(t >> 0) & 1 ? t : 0];
          dp[s + 1][r][c][t] &= dp[s][r][c + ss][(t >> 1) & 1 ? t : 0];
          dp[s + 1][r][c][t] &= dp[s][r + ss][c][(t >> 2) & 1 ? t : 0];
          dp[s + 1][r][c][t] &= dp[s][r + ss][c + ss][(t >> 3) & 1 ? t : 0];
          if (dp[s + 1][r][c][t]) ans++;
        }
  }
  cout << ans << endl;
}
