#include <bits/stdc++.h>
using namespace std;
const int maxn = 555;
int h, w;
char mat[maxn][maxn];
int ss[maxn][maxn];
int sum(int r2, int c2, int r1, int c1) {
  int ret = 0;
  ret += ss[r2][c2];
  ret -= ss[r2][c1 - 1];
  ret -= ss[r1 - 1][c2];
  ret += ss[r1 - 1][c1 - 1];
  return ret;
}
short dp[10][maxn][maxn][1 << 4];
;
int mask;
bool split(int r1, int c1, int log) {
  if (dp[log][r1][c1][mask] != -1) return dp[log][r1][c1][mask];
  int r2 = r1 + (1 << log) - 1;
  int c2 = c1 + (1 << log) - 1;
  int rmid = (r1 + r2) / 2;
  int cmid = (c1 + c2) / 2;
  int r[] = {r1, rmid + 1, rmid + 1, r1};
  int c[] = {c1, cmid + 1, c1, cmid + 1};
  int rn[] = {rmid, r2, r2, rmid};
  int cn[] = {cmid, c2, cmid, c2};
  bool ret = true;
  for (int i = 0; i < 4 && ret; ++i) {
    bool b = mask & (1 << i);
    if (b)
      ret = sum(rn[i], cn[i], r[i], c[i]) == 0;
    else {
      if (log == 1)
        ret = mat[r[i]][c[i]] == 1;
      else
        ret = split(r[i], c[i], log - 1);
    }
  }
  return dp[log][r1][c1][mask] = ret;
}
int main() {
  scanf("%d%d", &h, &w);
  for (int i = 1; i <= h; ++i) {
    scanf("%s", mat[i] + 1);
    for (int j = 1; j <= w; ++j) {
      if (mat[i][j] == '.')
        mat[i][j] = 1;
      else
        mat[i][j] = 0;
    }
  }
  for (int c = 1; c <= w; ++c) {
    for (int r = 1; r <= h; ++r) {
      ss[r][c] = ss[r - 1][c] + mat[r][c];
    }
  }
  for (int r = 1; r <= h; ++r)
    for (int c = 1; c <= w; ++c) ss[r][c] += ss[r][c - 1];
  int sol = 0;
  memset(dp, -1, sizeof(dp));
  for (int r = 1; r <= h; ++r) {
    for (int c = 1; c <= w; ++c) {
      for (int stp = 4, clog = 2; clog < 10; stp *= 2, clog++) {
        if (stp + r > h + 1) continue;
        if (stp + c > w + 1) continue;
        for (mask = 0; mask < (1 << 4); ++mask) {
          sol += split(r, c, clog);
        }
      }
    }
  }
  printf("%d\n", sol);
  return 0;
}
