#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:50000000")
using namespace std;
const long long mod = 1000000007;
const char aa = 'a';
const double eps = 1E-9;
template <typename T>
bool within(T a, T b, T c) {
  return (a <= c && a >= b);
}
int gcd(int m, int n) {
  if (m == 0 || n == 0) return m + n;
  return gcd(n, m % n);
}
long long binom[30][30];
const int maxn = 40001;
const int dr[] = {0, -1, 0, 1};
const int dc[] = {1, 0, -1, 0};
void setBinom() {
  int Z = (int)sqrt(sizeof(binom) / sizeof(int) + eps);
  memset(binom, 0, sizeof(binom));
  for (int i = 0; i < (int)(Z); i++)
    for (int j = 0; j < (int)(Z); j++) {
      if (i && j)
        binom[i][j] = binom[i - 1][j] + binom[i][j - 1];
      else
        binom[i][j] = 1;
    }
}
int cal() { return 0; }
int main() {
  int n, m;
  cin >> n >> m;
  vector<vector<int> > B(n);
  for (int i = 0; i < (int)(n); i++) {
    string tmp;
    cin >> tmp;
    for (int j = 0; j < (int)(m); j++) B[i].push_back(tmp[j] == '*');
  }
  int res = 0;
  int IB[2][501][501];
  memset(IB, 255, sizeof(IB));
  for (int i = (1); i < (int)(10); i++) {
    for (int r = 0; r < (int)(n); r++)
      for (int c = 0; c < (int)(m); c++)
        if (r + (1 << (i)) - 1 < n && c + (1 << (i)) - 1 < m) {
          int len = (1 << (i));
          if (i == 1) {
            IB[1][r][c] = B[r][c] + 2 * B[r][c + 1] + 4 * B[r + 1][c] +
                          8 * B[r + 1][c + 1];
            IB[0][r][c] = IB[1][r][c];
          } else {
            int x = IB[0][r][c];
            int y = IB[0][r][c + len / 2];
            int z = IB[0][r + len / 2][c];
            int t = IB[0][r + len / 2][c + len / 2];
            if (x < 0 || y < 0 || z < 0 || t < 0) {
              IB[1][r][c] = -1;
              continue;
            }
            int st = (x == 15) + 2 * (y == 15) + 4 * (z == 15) + 8 * (t == 15);
            if (st == 15) {
              IB[1][r][c] = 15;
              res++;
            } else {
              int v[] = {x, y, z, t};
              bool ok = 1;
              for (int j = 0; j < (int)(4); j++)
                if (v[j] != 15 && v[j] != st) ok = 0;
              res += ok;
              if (ok)
                IB[1][r][c] = st;
              else
                IB[1][r][c] = -1;
            }
          }
        }
    for (int r = 0; r < (int)(n); r++)
      for (int c = 0; c < (int)(m); c++)
        if (r + (1 << (i)) - 1 < n && c + (1 << (i)) - 1 < m)
          IB[0][r][c] = IB[1][r][c];
  }
  cout << res << endl;
}
