#include <bits/stdc++.h>
using namespace std;
int N, M;
char a[555][555];
bool fractal[11][555][555], black[11][555][555];
int q(int a0, int a1, int a2, int a3) {
  return (a0 << 0) + (a1 << 1) + (a2 << 2) + (a3 << 3);
}
int main(int argc, char *argv[]) {
  scanf("%d%d", &N, &M);
  int ans = 0;
  for (int i = 0; i < (N); i++) scanf("%s", a[i]);
  for (int i = 0; i < (N); i++)
    for (int j = 0; j < (M); j++) black[0][i][j] = (a[i][j] == '*');
  for (int b = 0; b < (10); b++)
    for (int i = 0; i < (N); i++)
      for (int j = 0; j < (M); j++) {
        int ii = i + (1 << b), jj = j + (1 << b);
        if (ii < N && jj < M)
          black[b + 1][i][j] = black[b][i][j] && black[b][ii][j] &&
                               black[b][i][jj] && black[b][ii][jj];
      }
  for (int mask = 0; mask < (1 << 4); mask++) {
    for (int i = 0; i < (N - 1); i++)
      for (int j = 0; j < (M - 1); j++)
        fractal[1][i][j] =
            (mask == q(black[0][i][j], black[0][i + 1][j], black[0][i][j + 1],
                       black[0][i + 1][j + 1]));
    for (int b = (1); b <= (9); b++)
      for (int i = 0; i < (N); i++)
        for (int j = 0; j < (M); j++) {
          int ii = i + (1 << b), jj = j + (1 << b);
          if (ii < N && jj < M)
            ans +=
                (fractal[b + 1][i][j] =
                     (((mask & (1 << 0)) ? black[b][i][j] : fractal[b][i][j]) &&
                      ((mask & (1 << 1)) ? black[b][ii][j]
                                         : fractal[b][ii][j]) &&
                      ((mask & (1 << 2)) ? black[b][i][jj]
                                         : fractal[b][i][jj]) &&
                      ((mask & (1 << 3)) ? black[b][ii][jj]
                                         : fractal[b][ii][jj])));
        }
  }
  printf("%d\n", ans);
  return 0;
}
