#include <bits/stdc++.h>
using namespace std;
const int N = 505;
char str[N][N];
char temp[N][N];
int n, m;
void Generate(int x1, int x2, int y1, int y2, set<pair<int, int>>& f) {
  if (x1 == x2 and y1 == y2) {
    return;
  }
  int mx = (x1 + x2) / 2;
  int my = (y1 + y2) / 2;
  vector<pair<int, int>> v1, v2;
  v1.push_back(make_pair(x1, mx));
  v1.push_back(make_pair(mx + 1, x2));
  v2.push_back(make_pair(y1, my));
  v2.push_back(make_pair(my + 1, y2));
  for (int i = 0; i < v1.size(); i++) {
    for (int j = 0; j < v2.size(); j++) {
      if (f.find(make_pair(i, j)) != f.end()) {
        for (int I = v1[i].first; I <= v1[i].second; I++) {
          for (int J = v2[j].first; J <= v2[j].second; J++) {
            temp[I][J] = '*';
          }
        }
      } else {
        Generate(v1[i].first, v1[i].second, v2[j].first, v2[j].second, f);
      }
    }
  }
}
unsigned long long h2[N][N], h1[N][N];
unsigned long long a1[N][N], a2[N][N];
unsigned long long pw[N * N], base = 3797;
long long ans;
unsigned long long getHash1(int x1, int y1, int x2, int y2) {
  return h1[x2][y2] - h1[x1 - 1][y2] - h1[x2][y1 - 1] + h1[x1 - 1][y1 - 1];
}
unsigned long long getHash2(int x1, int y1, int x2, int y2) {
  return h2[x2][y2] - h2[x1 - 1][y2] - h2[x2][y1 - 1] + h2[x1 - 1][y1 - 1];
}
void work(int sz) {
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      a1[i][j] = pw[(i - 1) * m + j] * str[i][j];
      a2[i][j] = pw[(i - 1) * m + j] * temp[i][j];
    }
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      h1[i][j] = h1[i - 1][j] + h1[i][j - 1] - h1[i - 1][j - 1] + a1[i][j];
      h2[i][j] = h2[i - 1][j] + h2[i][j - 1] - h2[i - 1][j - 1] + a2[i][j];
    }
  }
  unsigned long long Hash2 =
      getHash2(1, 1, sz, sz) * pw[N * N - 1 - ((sz - 1) * m + sz)];
  for (int i = sz; i <= n; i++) {
    for (int j = sz; j <= m; j++) {
      unsigned long long Hash1 = getHash1(i - sz + 1, j - sz + 1, i, j);
      Hash1 = Hash1 * pw[N * N - 1 - ((i - 1) * m + j)];
      if (Hash1 == Hash2) ans++;
    }
  }
}
int main() {
  pw[0] = 1;
  for (int i = 1; i < N * N; i++) pw[i] = (pw[i - 1] * base);
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%s", str[i] + 1);
  for (int sz = 4; sz <= min(n, m); sz = sz * 2) {
    for (int mask = 0; mask < 16; mask++) {
      set<pair<int, int>> f;
      memset(temp, '.', sizeof(temp));
      if (mask & 1) f.insert(make_pair(0, 0));
      if (mask & 2) f.insert(make_pair(0, 1));
      if (mask & 4) f.insert(make_pair(1, 0));
      if (mask & 8) f.insert(make_pair(1, 1));
      Generate(1, sz, 1, sz, f);
      work(sz);
    }
  }
  cout << ans << "\n";
}
