#include <bits/stdc++.h>
using namespace std;
char m[512][512];
int N, M, R = 0;
unsigned char PD[512][512][9];
bool foi[512][512][9];
unsigned char calc(int y, int x, int L) {
  int i, f;
  int l = 1 << L;
  unsigned char p, a[4];
  if (l == 2) {
    return ((m[y][x] == '*') | ((m[y][x + 1] == '*') << 1) |
            ((m[y + 1][x] == '*') << 2) | ((m[y + 1][x + 1] == '*') << 3));
  }
  if (foi[y][x][L]) {
    return PD[y][x][L];
  }
  foi[y][x][L] = 1;
  a[0] = calc(y, x, L - 1);
  a[1] = calc(y, x + (l >> 1), L - 1);
  a[2] = calc(y + (l >> 1), x, L - 1);
  a[3] = calc(y + (l >> 1), x + (l >> 1), L - 1);
  for (i = 0; i < 4; i++) {
    if (a[i] == 0xFF) {
      return (PD[y][x][L] = 0xFF);
    }
  }
  p = 0xF;
  for (i = 0; i < 4; i++) {
    if (a[i] != 0xF) {
      p = a[i];
      break;
    }
  }
  f = __builtin_popcount(p);
  for (i = 0; i < 4; i++) {
    if ((a[i] == 0xF && !(p & (1 << i))) || (a[i] != 0xF && a[i] != p)) {
      return (PD[y][x][L] = 0xFF);
    }
    if (a[i] == 0xF) {
      f--;
    }
  }
  if (f != 0) {
    return (PD[y][x][L] = 0xFF);
  }
  R++;
  return (PD[y][x][L] = p);
}
int main() {
  int i, n, x, y;
  memset(foi, 0, sizeof(foi));
  scanf("%d %d", &N, &M);
  for (x = 2; x << 1 <= M; x <<= 1)
    ;
  for (y = 2; y << 1 <= N; y <<= 1)
    ;
  x = min(y, x);
  for (y = 1; 1 << y != x; y++)
    ;
  for (i = 0; i < N; i++) {
    scanf("%s", m[i]);
  }
  while (x >= 2) {
    for (i = 0; i + x <= N; i++) {
      for (n = 0; n + x <= M; n++) {
        calc(i, n, y);
      }
    }
    x >>= 1;
    y--;
  }
  printf("%d\n", R);
  return 0;
}
