#include <bits/stdc++.h>
using namespace std;
int m, n;
int pow2[] = {1, 2, 4, 8, 16, 32, 64, 128, 256};
int c[501][501];
int s[501][501];
int f[501][501][9][16];
int dx[] = {0, 0, 1, 1};
int dy[] = {0, 1, 0, 1};
int getBit(int, int);
int get(int, int, int);
bool isFull(int, int, int);
bool isEmpty(int, int, int);
bool cal(int, int, int, int);
int main() {
  cin >> m >> n;
  for (int i = 0; i < m; i++) {
    string str;
    cin >> str;
    for (int j = 0; j < n; j++) {
      if (str[j] == '*') {
        c[i + 1][j + 1] = 1;
      }
      s[i + 1][j + 1] = s[i][j + 1] + s[i + 1][j] - s[i][j] + c[i + 1][j + 1];
    }
  }
  for (int mask = 0; mask < 16; mask++)
    for (int i = 1; i <= m; i++)
      for (int j = 1; j <= n; j++) {
        f[i][j][0][mask] = 1;
      }
  for (int mask = 0; mask < 16; mask++)
    for (int i = 1; i <= m; i++)
      for (int j = 1; j <= n; j++)
        if (i + 1 <= m && j + 1 <= n) {
          f[i][j][1][mask] = 1;
          for (int b = 0; b < 4; b++)
            if (getBit(mask, b) != c[i + dx[b]][j + dy[b]]) {
              f[i][j][1][mask] = 0;
              break;
            }
        }
  long long res = 0;
  for (int mask = 0; mask < 16; mask++)
    for (int k = 2; k < 9; k++)
      for (int i = 1; i <= m; i++)
        for (int j = 1; j <= n; j++) {
          if (cal(i, j, k, mask)) {
            f[i][j][k][mask] = 1;
          }
        }
  for (int i = 1; i <= m; i++)
    for (int j = 1; j <= n; j++)
      for (int k = 2; k < 9; k++)
        for (int mask = 0; mask < 16; mask++) {
          if (f[i][j][k][mask]) {
            res++;
            break;
          }
        }
  cout << res << endl;
  return 0;
}
int get(int i, int j, int len) {
  int u = i + len - 1;
  int v = j + len - 1;
  return (s[u][v] - s[i - 1][v] - s[u][j - 1] + s[i - 1][j - 1]);
}
bool isFull(int i, int j, int len) { return (get(i, j, len) == len * len); }
bool isEmpty(int i, int j, int len) { return (get(i, j, len) == 0); }
bool cal(int i, int j, int k, int mask) {
  int len = 1 << k;
  int len2 = len / 2;
  if (i + len - 1 > m || j + len - 1 > n) {
    return false;
  }
  for (int b = 0; b < 4; b++)
    if (getBit(mask, b) && !isFull(i + len2 * dx[b], j + len2 * dy[b], len2)) {
      return false;
    } else if (getBit(mask, b) == 0 &&
               f[i + len2 * dx[b]][j + len2 * dy[b]][k - 1][mask] != 1) {
      return false;
    }
  return true;
}
int getBit(int x, int i) { return ((x & (1 << i)) != 0); }
