#include <bits/stdc++.h>
using namespace std;
int n, m;
int a[501][501];
int s[501][501];
bool dp[16][501][501][10];
int ans;
int get(int a, int b, int c, int d) {
  return (s[c][d] - s[c][b - 1] - s[a - 1][d] + s[a - 1][b - 1]);
}
int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    char c;
    cin.get(c);
    for (int j = 1; j <= m; j++) {
      cin.get(c);
      a[i][j] = (c == '*');
      s[i][j] = s[i][j - 1] + s[i - 1][j] - s[i - 1][j - 1] + a[i][j];
    }
  }
  for (int mask = 0; mask < 16; mask++) {
    for (int len = 1; len < 10; len++) {
      for (int x = 1; x <= n; x++) {
        for (int y = 1; y <= m; y++) {
          int x1 = x + (1 << len) - 1, y1 = y + (1 << len) - 1;
          int sq = (x1 - x + 1) * (x1 - x + 1);
          if (x1 > n || y1 > m) continue;
          if (len == 1) {
            int m = a[x][y] + 2 * a[x][y + 1] + 4 * a[x + 1][y] +
                    8 * a[x + 1][y + 1];
            if (m == mask) dp[mask][x][y][1] = true;
            continue;
          }
          bool f1 = true, f2 = true;
          int l = 1 << (len - 1);
          if (mask & 1) {
            int ss = get(x, y, x + l - 1, y + l - 1);
            if (4 * ss != sq) f1 = false;
          } else {
            f2 &= dp[mask][x][y][len - 1];
          }
          if (mask & 2) {
            int ss = get(x, y + l, x + l - 1, y1);
            if (4 * ss != sq) f1 = false;
          } else {
            f2 &= dp[mask][x][y + l][len - 1];
          }
          if (mask & 4) {
            int ss = get(x + l, y, x1, y + l - 1);
            if (4 * ss != sq) f1 = false;
          } else {
            f2 &= dp[mask][x + l][y][len - 1];
          }
          if (mask & 8) {
            int ss = get(x + l, y + l, x1, y1);
            if (4 * ss != sq) f1 = false;
          } else {
            f2 &= dp[mask][x + l][y + l][len - 1];
          }
          dp[mask][x][y][len] = f1 & f2;
          ans += (f1 & f2);
        }
      }
    }
  }
  cout << ans;
  return 0;
}
