#include <bits/stdc++.h>
using namespace std;
const int i32INF = 1 << 30;
char s[1 << 9][1 << 9];
int bs[1 << 9][1 << 9];
int n, m;
int get(int i, int j) {
  if (0 <= i && i < n && 0 <= j && j < m)
    return bs[i][j];
  else
    return 0;
}
bool isAllBlack(int i, int j, int size) {
  int c = 0;
  c += get(i + size - 1, j + size - 1);
  c -= get(i - 1, j + size - 1);
  c -= get(i + size - 1, j - 1);
  c += get(i - 1, j - 1);
  return c == size * size;
}
char Template[2][2];
bool isTemplate(int i, int j) {
  return s[i][j] == Template[0][0] && s[i + 1][j] == Template[1][0] &&
         s[i][j + 1] == Template[0][1] && s[i + 1][j + 1] == Template[1][1];
}
int getlg(int size) {
  for (int i = 1;; i++)
    if (size == (1 << i)) return i;
}
int dp[512][512][10];
bool ok(int i, int j, int size) {
  int lg = getlg(size);
  if (dp[i][j][lg] == -1) {
    if (size == 2) return isTemplate(i, j);
    size >>= 1;
    if (Template[1][1] == '*' && !isAllBlack(i + size, j + size, size)) {
      dp[i][j][lg] = false;
      return false;
    }
    if (Template[1][1] == '.' && !ok(i + size, j + size, size)) {
      dp[i][j][lg] = false;
      return false;
    }
    if (Template[0][1] == '*' && !isAllBlack(i, j + size, size)) {
      dp[i][j][lg] = false;
      return false;
    }
    if (Template[0][1] == '.' && !ok(i, j + size, size)) {
      dp[i][j][lg] = false;
      return false;
    }
    if (Template[1][0] == '*' && !isAllBlack(i + size, j, size)) {
      dp[i][j][lg] = false;
      return false;
    }
    if (Template[1][0] == '.' && !ok(i + size, j, size)) {
      dp[i][j][lg] = false;
      return false;
    }
    if (Template[0][0] == '*' && !isAllBlack(i, j, size)) {
      dp[i][j][lg] = false;
      return false;
    }
    if (Template[0][0] == '.' && !ok(i, j, size)) {
      dp[i][j][lg] = false;
      return false;
    }
    dp[i][j][lg] = 1;
  }
  return dp[i][j][lg];
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) scanf("%s", s[i]);
  for (int i = 0; i < n; i++)
    if (s[i][0] == '*') bs[i][0] = 1;
  for (int i = 0; i < n; i++) {
    for (int j = 1; j < m; j++) {
      if (s[i][j] == '*') bs[i][j] = 1;
      bs[i][j] += bs[i][j - 1];
    }
  }
  for (int i = 1; i < n; i++)
    for (int j = 0; j < m; j++) bs[i][j] += bs[i - 1][j];
  int res = 0;
  for (int mask = 0; mask < (1 << 4); mask++) {
    memset(dp, -1, sizeof dp);
    for (int i = 0; i < 4; i++)
      if (mask & (1 << i))
        Template[i / 2][i % 2] = '*';
      else
        Template[i / 2][i % 2] = '.';
    for (int size = 4; size < 512; size *= 2)
      for (int i = 0; i + size <= n; i++)
        for (int j = 0; j + size <= m; j++)
          if (ok(i, j, size)) res++;
  }
  cout << res << endl;
  return 0;
}
