#include <bits/stdc++.h>
using namespace std;
void setIO(string name = "") {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  if (int((name).size())) {
    freopen((name + ".in").c_str(), "r", stdin);
    freopen((name + ".out").c_str(), "w", stdout);
  }
}
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
long long mcm(long long a, long long b) { return (a * b) / gcd(a, b); }
bool prime(long long n, long long i) {
  if (i > sqrt(n)) return true;
  if (n % i == 0)
    return false;
  else
    return prime(n, i + 1);
}
struct compii {
  bool operator()(const pair<int, int> &a, const pair<int, int> &b) {
    if (a.first == a.second) return a.second < b.second;
    return a.first > b.first;
  }
};
bool comp(int a, int b) { return a > b; }
int dx[] = {1, 0, -1, 0};
int dy[] = {0, 1, 0, -1};
const int mod = 1e9 + 7;
const long long inf = 1e18;
bool check(char a) { return (a == 'f' or a == 'a' or a == 'c' or a == 'e'); }
void solve() {
  int n, m;
  cin >> n >> m;
  vector<vector<char> > a(n, vector<char>(m));
  for (auto &x : a)
    for (auto &y : x) cin >> y;
  if (n == 1 or m == 1) {
    cout << 0 << endl;
    return;
  }
  int ans = 0;
  for (int i = 0; i < n - 1; i++) {
    for (int j = 0; j < m - 1; j++) {
      if (a[i][j] == a[i][j + 1] or a[i][j] == a[i + 1][j] or
          a[i][j] == a[i + 1][j + 1])
        continue;
      if (a[i][j + 1] == a[i + 1][j] or a[i][j + 1] == a[i + 1][j + 1])
        continue;
      if (a[i + 1][j] == a[i + 1][j + 1]) continue;
      if (check(a[i][j]) and check(a[i + 1][j]) and check(a[i][j + 1]) and
          check(a[i + 1][j + 1]))
        ans++;
    }
  }
  cout << ans << endl;
}
int main() {
  setIO("");
  int t = 1;
  while (t-- > 0) solve();
  return 0;
}
