#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const double eps = 1e-8;
const int maxn = 600;
int sum[maxn][maxn], f[maxn][maxn], n, m;
char s[maxn][maxn], t[maxn][maxn], bak[maxn][maxn];
inline void rotate() {
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      t[i][j] = s[i][j];
    }
  }
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      s[j][n - 1 - i] = t[i][j];
    }
  }
  swap(n, m);
}
inline int getSum(int x1, int y1, int x2, int y2) {
  return sum[x2 + 1][y2 + 1] - sum[x2 + 1][y1] - sum[x1][y2 + 1] + sum[x1][y1];
}
inline int calc(int stat) {
  memset(sum, 0, sizeof(sum));
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      sum[i + 1][j + 1] =
          sum[i + 1][j] + sum[i][j + 1] - sum[i][j] + (s[i][j] == '*');
    }
  }
  memset(f, 0, sizeof(f));
  for (int i = 0; i < n; ++i) {
    for (int j = m - 1; j >= 0; --j) {
      if (i - 1 >= 0 && j + 1 < m && (s[i][j] == '*') == (stat & 1) &&
          (s[i - 1][j] == '*') == (stat >> 1 & 1) &&
          (s[i][j + 1] == '*') == (stat >> 2 & 1) &&
          (s[i - 1][j + 1] == '*') == (stat >> 3 & 1)) {
        f[i][j] = 1;
        int len = 2;
        for (int k = 1; k <= f[i][j]; ++k) {
          if (i - len >= 0 && j + len < m) {
            bool valid = true;
            if (stat & 1) {
              valid &= getSum(i - len + 1, j, i, j + len - 1) == len * len;
            } else {
              valid &= f[i][j] >= k;
            }
            if (stat >> 1 & 1) {
              valid &=
                  getSum(i - 2 * len + 1, j, i - len, j + len - 1) == len * len;
            } else {
              valid &= f[i - len][j] >= k;
            }
            if (stat >> 2 & 1) {
              valid &=
                  getSum(i - len + 1, j + len, i, j + 2 * len - 1) == len * len;
            } else {
              valid &= f[i][j + len] >= k;
            }
            if (stat >> 3 & 1) {
              valid &= getSum(i - 2 * len + 1, j + len, i - len,
                              j + 2 * len - 1) == len * len;
            } else {
              valid &= f[i - len][j + len] >= k;
            }
            if (valid) {
              f[i][j] = k + 1;
              len *= 2;
            }
          }
        }
      }
    }
  }
  int ret = 0;
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      ret += max(f[i][j] - 1, 0);
    }
  }
  return ret;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; ++i) {
    scanf("%s", s[i]);
  }
  memcpy(bak, s, sizeof(s));
  int ans = 0, bakn = n, bakm = m;
  ;
  for (int i = 0; i < 1 << 4; ++i) {
    memcpy(s, bak, sizeof(s));
    n = bakn;
    m = bakm;
    if (i & 1) {
      rotate();
      if (i >> 2 & 1) {
        rotate();
        if (i >> 3 & 1) {
          rotate();
          ans += calc((i >> 1 & 1) | (i >> 3 & 1) << 1 | (i & 1) << 2 |
                      (i >> 2 & 1) << 3);
        } else {
          ans += calc((i >> 3 & 1) | (i >> 2 & 1) << 1 | (i >> 1 & 1) << 2 |
                      (i & 1) << 3);
        }
      } else {
        ans += calc((i >> 2 & 1) | (i & 1) << 1 | (i >> 3 & 1) << 2 |
                    (i >> 1 & 1) << 3);
      }
    } else {
      ans += calc(i);
    }
  }
  printf("%d\n", ans);
  return 0;
}
