#include <bits/stdc++.h>
using namespace std;
typedef int mat[510][510];
struct hasher2D {
  mat hash;
  int exc[510], exr[510];
  void init(const mat a, int n, int m) {
    exc[0] = 1;
    for (int i = 1; i <= 510; i++) exc[i] = exc[i - 1] * 1538372977;
    exr[0] = 1;
    for (int i = 1; i <= 510; i++) exr[i] = exr[i - 1] * 1067483429;
    memset(hash, 0, sizeof hash);
    for (int i = 0; i <= n; i++) {
      hash[i][0] = 0;
      for (int j = 1; j <= m; j++)
        hash[i][j] = hash[i][j - 1] * 1538372977 + a[i][j];
      for (int j = 0; j <= m; j++) hash[i][j] += hash[i - 1][j] * 1067483429;
    }
  }
  int query(int x1, int y1, int x2, int y2) {
    return (hash[x2][y2] - hash[x1 - 1][y2] * exr[x2 - x1 + 1]) -
           (hash[x2][y1 - 1] - hash[x1 - 1][y1 - 1] * exr[x2 - x1 + 1]) *
               exc[y2 - y1 + 1];
  }
};
int fractal[2][2][2][2][10];
int cntrl[2][2];
mat cl;
hasher2D t, vasya;
void gen(int x1, int y1, int size) {
  if (size == 1) return;
  size = size >> 1;
  for (int i = 0; i < 2; i++)
    for (int j = 0; j < 2; j++)
      if (cntrl[i][j]) {
        for (int k = x1 + size * i; k < x1 + size * (i + 1); k++)
          for (int L = y1 + size * j; L < y1 + size * (j + 1); L++)
            cl[k][L] = 1;
      } else
        gen(x1 + size * i, y1 + size * j, size);
}
void genfractal() {
  for (int ul = 0; ul < 2; ul++)
    for (int ur = 0; ur < 2; ur++)
      for (int dl = 0; dl < 2; dl++)
        for (int dr = 0; dr < 2; dr++) {
          cntrl[0][0] = ul;
          cntrl[0][1] = ur;
          cntrl[1][0] = dl;
          cntrl[1][1] = dr;
          for (int size = 2; size <= 8; size++) {
            memset(cl, 0, sizeof cl);
            gen(1, 1, 1 << size);
            t.init(cl, 1 << size, 1 << size);
            fractal[ul][ur][dl][dr][size] = t.query(1, 1, 1 << size, 1 << size);
          }
        }
}
void lemon() {
  genfractal();
  int n, m;
  scanf("%d%d", &n, &m);
  memset(cl, 0, sizeof cl);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) {
      char ch;
      do ch = getchar();
      while (ch != '*' && ch != '.');
      if (ch == '*')
        cl[i][j] = 1;
      else
        cl[i][j] = 0;
    }
  vasya.init(cl, n, m);
  int final = 0;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      for (int size = 2; i + (1 << size) - 1 <= n && j + (1 << size) - 1 <= m;
           size++) {
        int flag = 0;
        for (int ul = 0; ul < 2; ul++)
          for (int ur = 0; ur < 2; ur++)
            for (int dl = 0; dl < 2; dl++)
              for (int dr = 0; dr < 2; dr++)
                if (vasya.query(i, j, i + (1 << size) - 1,
                                j + (1 << size) - 1) ==
                    fractal[ul][ur][dl][dr][size])
                  flag = 1;
        if (flag) final++;
      }
  printf("%d\n", final);
}
int main() {
  lemon();
  return 0;
}
