#include <bits/stdc++.h>
using namespace std;
char mp[2][505][505];
int cant[2][2][505][505] = {0};
int sum[2][505][505];
int can[2][505][505];
inline int calc(int x1, int y1, int x2, int y2, int p) {
  int a, b, c, d;
  a = sum[p][x2][y2];
  if (x1)
    b = sum[p][x1 - 1][y2];
  else
    b = 0;
  if (y1)
    c = sum[p][x2][y1 - 1];
  else
    c = 0;
  if (x1 && y1)
    d = sum[p][x1 - 1][y1 - 1];
  else
    d = 0;
  return a - b - c + d;
}
int main() {
  int n, m;
  while (cin >> n >> m) {
    memset(mp, 0, sizeof(mp));
    ;
    for (int i = 0; i < n; i++) scanf("%s", mp[0][i]);
    for (int i = 0; i < n; i++)
      for (int j = 0; j < m; j++)
        mp[1][i][j] = (mp[0][i][j] == '*' ? '.' : '*');
    sum[0][0][0] = (mp[0][0][0] == '*');
    for (int i = 1; i < n; i++)
      sum[0][i][0] = sum[0][i - 1][0] + (mp[0][i][0] == '*');
    for (int i = 1; i < m; i++)
      sum[0][0][i] = sum[0][0][i - 1] + (mp[0][0][i] == '*');
    for (int i = 1; i < n; i++)
      for (int j = 1; j < m; j++)
        sum[0][i][j] = sum[0][i - 1][j] + sum[0][i][j - 1] -
                       sum[0][i - 1][j - 1] + (mp[0][i][j] == '*');
    memset(cant, 0, sizeof(cant));
    ;
    for (int i = 0; i < n; i++)
      for (int j = 0; j < m; j++) {
        if (mp[0][i][j] == '.') cant[0][0][i][j] = -1;
        if (mp[1][i][j] == '.') cant[1][0][i][j] = -1;
      }
    int now = 1;
    long long res = 0;
    for (int i = 1; i <= n; i *= 2) {
      for (int j = 0; j + i + i - 1 < n; j++)
        for (int k = 0; k + i + i - 1 < m; k++) {
          if (calc(j, k, j + i - 1, k + i - 1, 0) == i * i &&
              cant[0][!now][j][k + i] && cant[0][!now][j + i][k] &&
              cant[0][!now][j + i][k + i]) {
            cant[0][now][j][k] = -1;
            if (i > 1) res++;
          }
        }
      memset(cant[0][!now], 0, sizeof(cant[0][!now]));
      now = !now;
    }
    memset(cant, 0, sizeof(cant));
    ;
    for (int i = 0; i < n; i++)
      for (int j = 0; j < m; j++) {
        if (mp[0][i][j] == '.') cant[0][0][i][j] = -1;
        if (mp[1][i][j] == '.') cant[1][0][i][j] = -1;
      }
    now = 1;
    for (int i = 1; i <= n; i *= 2) {
      for (int j = 0; j + i + i - 1 < n; j++)
        for (int k = m - 1; k - i - i + 1 >= 0; k--) {
          if (calc(j, k - i + 1, j + i - 1, k, 0) == i * i &&
              cant[0][!now][j][k - i] && cant[0][!now][j + i][k] &&
              cant[0][!now][j + i][k - i]) {
            cant[0][now][j][k] = -1;
            if (i > 1) res++;
          }
        }
      memset(cant[0][!now], 0, sizeof(cant[0][!now]));
      now = !now;
    }
    memset(cant, 0, sizeof(cant));
    ;
    for (int i = 0; i < n; i++)
      for (int j = 0; j < m; j++) {
        if (mp[0][i][j] == '.') cant[0][0][i][j] = -1;
        if (mp[1][i][j] == '.') cant[1][0][i][j] = -1;
      }
    now = 1;
    for (int i = 1; i <= n; i *= 2) {
      for (int j = n - 1; j - i - i + 1 >= 0; j--)
        for (int k = 0; k + i + i - 1 < m; k++) {
          if (calc(j - i + 1, k, j, k + i - 1, 0) == i * i &&
              cant[0][!now][j][k + i] && cant[0][!now][j - i][k] &&
              cant[0][!now][j - i][k + i]) {
            cant[0][now][j][k] = -1;
            if (i > 1) res++;
          }
        }
      memset(cant[0][!now], 0, sizeof(cant[0][!now]));
      now = !now;
    }
    memset(cant, 0, sizeof(cant));
    ;
    for (int i = 0; i < n; i++)
      for (int j = 0; j < m; j++) {
        if (mp[0][i][j] == '.') cant[0][0][i][j] = -1;
        if (mp[1][i][j] == '.') cant[1][0][i][j] = -1;
      }
    now = 1;
    for (int i = 1; i <= n; i *= 2) {
      for (int j = n - 1; j - i - i + 1 >= 0; j--)
        for (int k = m - 1; k - i - i + 1 >= 0; k--) {
          if (calc(j - i + 1, k - i + 1, j, k, 0) == i * i &&
              cant[0][!now][j][k - i] && cant[0][!now][j - i][k] &&
              cant[0][!now][j - i][k - i]) {
            cant[0][now][j][k] = -1;
            if (i > 1) res++;
          }
        }
      memset(cant[0][!now], 0, sizeof(cant[0][!now]));
      now = !now;
    }
    memset(can, 0, sizeof(can));
    ;
    for (int i = 0; i < n; i++)
      for (int j = 0; j < m; j++)
        if (mp[0][i][j] == '.') can[0][i][j] = -1;
    now = 1;
    for (int i = 1; i <= n; i *= 2) {
      for (int j = 0; j + i + i - 1 < n; j++)
        for (int k = 0; k + i + i - 1 < m; k++) {
          if (calc(j, k, j + i + i - 1, k + i - 1, 0) == 2 * i * i &&
              can[!now][j][k + i] && can[!now][j + i][k + i]) {
            can[now][j][k] = -1;
            if (i > 1) res++;
          }
        }
      memset(can[!now], 0, sizeof(can[!now]));
      now = !now;
    }
    memset(can, 0, sizeof(can));
    ;
    for (int i = 0; i < n; i++)
      for (int j = 0; j < m; j++)
        if (mp[0][i][j] == '.') can[0][i][j] = -1;
    now = 1;
    for (int i = 1; i <= n; i *= 2) {
      for (int j = 0; j + i + i - 1 < n; j++)
        for (int k = m - 1; k - i - i + 1 >= 0; k--) {
          if (calc(j, k - i - i + 1, j + i - 1, k, 0) == 2 * i * i &&
              can[!now][j + i][k] && can[!now][j + i][k - i]) {
            can[now][j][k] = -1;
            if (i > 1) res++;
          }
        }
      memset(can[!now], 0, sizeof(can[!now]));
      now = !now;
    }
    memset(can, 0, sizeof(can));
    ;
    for (int i = 0; i < n; i++)
      for (int j = 0; j < m; j++)
        if (mp[0][i][j] == '.') can[0][i][j] = -1;
    now = 1;
    for (int i = 1; i <= n; i *= 2) {
      for (int j = n - 1; j - i - i + 1 >= 0; j--)
        for (int k = 0; k + i + i - 1 < m; k++) {
          if (calc(j - i + 1, k, j, k + i + i - 1, 0) == 2 * i * i &&
              can[!now][j - i][k] && can[!now][j - i][k + i]) {
            can[now][j][k] = -1;
            if (i > 1) res++;
          }
        }
      memset(can[!now], 0, sizeof(can[!now]));
      now = !now;
    }
    memset(can, 0, sizeof(can));
    ;
    for (int i = 0; i < n; i++)
      for (int j = 0; j < m; j++)
        if (mp[0][i][j] == '.') can[0][i][j] = -1;
    now = 1;
    for (int i = 1; i <= n; i *= 2) {
      for (int j = n - 1; j - i - i + 1 >= 0; j--)
        for (int k = m - 1; k - i - i + 1 >= 0; k--) {
          if (calc(j - i - i + 1, k - i + 1, j, k, 0) == 2 * i * i &&
              can[!now][j][k - i] && can[!now][j - i][k - i]) {
            can[now][j][k] = -1;
            if (i > 1) res++;
          }
        }
      memset(can[!now], 0, sizeof(can[!now]));
      now = !now;
    }
    memset(can, 0, sizeof(can));
    ;
    for (int i = 0; i < n; i++)
      for (int j = 0; j < m; j++)
        if (mp[0][i][j] == '.') can[0][i][j] = -1;
    now = 1;
    for (int i = 1; i <= n; i *= 2) {
      for (int j = 0; j + i + i - 1 < n; j++)
        for (int k = 0; k + i + i - 1 < m; k++) {
          if (calc(j + i, k + i, j + i + i - 1, k + i + i - 1, 0) == i * i &&
              calc(j, k, j + i - 1, k + i - 1, 0) == i * i &&
              can[!now][j][k + i] && can[!now][j + i][k]) {
            can[now][j][k] = -1;
            if (i > 1) res++;
          }
        }
      memset(can[!now], 0, sizeof(can[!now]));
      now = !now;
    }
    memset(can, 0, sizeof(can));
    ;
    for (int i = 0; i < n; i++)
      for (int j = 0; j < m; j++)
        if (mp[0][i][j] == '.') can[0][i][j] = -1;
    now = 1;
    for (int i = 1; i <= n; i *= 2) {
      for (int j = 0; j + i + i - 1 < n; j++)
        for (int k = m - 1; k - i - i + 1 >= 0; k--) {
          if (calc(j + i, k - i - i + 1, j + i + i - 1, k - i, 0) == i * i &&
              calc(j, k - i + 1, j + i - 1, k, 0) == i * i &&
              can[!now][j][k - i] && can[!now][j + i][k]) {
            can[now][j][k] = -1;
            if (i > 1) res++;
          }
        }
      memset(can[!now], 0, sizeof(can[!now]));
      now = !now;
    }
    for (int i = 2; i <= n; i *= 2)
      for (int j = 0; j + i + i - 1 < n; j++)
        for (int k = 0; k + i + i - 1 < m; k++) {
          int x = calc(j, k, j + i + i - 1, k + i + i - 1, 0);
          if (x == 0 || x == 4 * i * i) res++;
          if (x == 4 * i * i - 1 &&
              (mp[0][j][k] == '.' || mp[0][j][k + i + i - 1] == '.' ||
               mp[0][j + i + i - 1][k] == '.' ||
               mp[0][j + i + i - 1][k + i + i - 1] == '.'))
            res++;
        }
    cout << res << endl;
  }
  return 0;
}
