'''
2022年1月的做法
时隔一年换了一种做法
但是依然犯了21年的错误。。。
'''
r,c = input().split()
r = int(r)
c = int(c)

lis = []
for i in range(r):
    li = list(input())
    lis.append(li)

r = r - 1
c = c - 1
nodelis = []
for x in range(r):
    for y in range(c):
        nodelis.append((x, y))

s = set()
s2 = set('face')
res = 0
if r < 1 or c < 1:
    print(res)
else:
    for node in nodelis:
        new_node1 = (node[0], node[1] + 1)
        new_node2 = (node[0] + 1, node[1] + 1)
        new_node3 = (node[0] + 1, node[1])
        s.add(lis[node[0]][node[1]])
        s.add(lis[new_node1[0]][new_node1[1]])
        s.add(lis[new_node2[0]][new_node2[1]])
        s.add(lis[new_node3[0]][new_node3[1]])
        if s == s2:
            res += 1
        s.clear()
    print(res)



'''2021 年2月的做法 '''
n, m = input().split()
n = int(n) m = int(m) lis = [] s = set() s1 = set('face') count = 0 # 生成右,下,右下 三个位置的下标 dirs = [     lambda x, y: (x, y + 1),     lambda x, y: (x + 1, y),     lambda x, y: (x + 1, y + 1) ] for i in range(n):     li = list(input())     lis.append(li) # 如果无法构成2*2则直接输出 0 if n < 2 and m < 2:     print(0) else:     for x in range(n - 1):         for y in range(m - 1):  # 最后一列和最后一行不用统计             s.add(lis[x][y])  # 将当前格子的字符加入集合s             for dir in dirs:                 next_node = dir(x, y)                 # 得到当前格子右,下,右下的格子坐标,如果没有越界则将该格子字符加入集合s                 if -1 < next_node[0] < n and -1 < next_node[1] < m:                     s.add(lis[next_node[0]][next_node[1]])             if s == s1:  # 判断集合s与s1是否相等                 count += 1             s.clear()     print(count) ''' 坑:题目并没有说只输入face字符,有可能输入其他字符,所以不能依靠集合去重功能来判断. 之前掉到这个坑里了: if len(s)==4:     count += 1 s.clear() '''