#include <bits/stdc++.h>
using namespace std;
const int sz = 501;
const int sz2 = 16;
int n, m;
string a[sz];
bool dp[sz][sz][sz2][sz2];
void solve() {
  cin >> n >> m;
  for (int i = 0; i < n; i++) cin >> a[i];
  long long ans = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (i + 1 < n && j + 1 < m) {
        int mask = 0;
        if (a[i][j] == '*') mask += (1 << 0);
        if (a[i][j + 1] == '*') mask += (1 << 1);
        if (a[i + 1][j] == '*') mask += (1 << 2);
        if (a[i + 1][j + 1] == '*') mask += (1 << 3);
        dp[i][j][0][mask] = 1;
      }
    }
  }
  for (int k = 1; k < sz2; k++) {
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        int l = (1 << k);
        for (int t = 0; t < sz2; t++) {
          dp[i][j][k][t] = 1;
          if (((t >> 0) & 1) == 1)
            dp[i][j][k][t] &= dp[i][j][k - 1][15];
          else
            dp[i][j][k][t] &= dp[i][j][k - 1][t];
          if (((t >> 1) & 1) == 1 && j + l < m)
            dp[i][j][k][t] &= dp[i][j + l][k - 1][15];
          else if (j + l < m)
            dp[i][j][k][t] &= dp[i][j + l][k - 1][t];
          else
            dp[i][j][k][t] = 0;
          if (((t >> 2) & 1) == 1 && i + l < n)
            dp[i][j][k][t] &= dp[i + l][j][k - 1][15];
          else if (i + l < n)
            dp[i][j][k][t] &= dp[i + l][j][k - 1][t];
          else
            dp[i][j][k][t] = 0;
          if (((t >> 3) & 1) == 1 && i + l < n && j + l < m)
            dp[i][j][k][t] &= dp[i + l][j + l][k - 1][15];
          else if (i + l < n && j + l < m)
            dp[i][j][k][t] &= dp[i + l][j + l][k - 1][t];
          else
            dp[i][j][k][t] = 0;
          if (dp[i][j][k][t]) ans++;
        }
      }
    }
  }
  cout << ans;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int q = 1;
  for (; q > 0; q--) {
    solve();
    cout << '\n';
  }
}
