defsolve(): n, m = map(int, input().split()) matrix = [input().strip() for _ inrange(n)]
ans = 0 heights = [0] * m for row in matrix: for i, ch inenumerate(row): heights[i] = heights[i] + 1if ch == "."else0
L = [0] * m R = [m - 1] * m st = [] for i, x inenumerate(heights): while st and x <= heights[st[-1]]: st.pop() # 此時 st[-1] 為左邊第一個高度 < x 的位置,故左邊界為 st[-1] + 1 L[i] = (st[-1] + 1) if st else0 st.append(i) st.clear() for i inrange(m - 1, -1, -1): while st and heights[i] < heights[st[-1]]: st.pop() # 此時 st[-1] 為右邊第一個高度 <= x 的位置,故右邊界為 st[-1] - 1 R[i] = (st[-1] - 1) if st else m - 1 st.append(i)
for i inrange(m): ans += (i - L[i] + 1) * (R[i] - i + 1) * heights[i] print(ans)
defsolve(): n, m = map(int, input().split()) matrix = [input().strip() for _ inrange(n)]
ans = 0 heights = [0] * m
for row in matrix: for i, ch inenumerate(row): heights[i] = heights[i] + 1if ch == "."else0
# f[j] = 以 j 為右端點的所有區間最小值總和 f = [0] * m st = [] for i, h inenumerate(heights): while st and h <= heights[st[-1]]: st.pop() if st: # 此時 st[-1] 為左邊第一個高度 < h 的位置 p = st[-1] # 左端點位於 [0, p],且右端點為 p 的矩形都能繼續延伸到 i 的位置,此部分貢獻為 f[p] # 左端點位於 [p+1, i] 的矩形,其高度最大可以為 h,貢獻為 h * (i - p) f[i] = f[p] + heights[i] * (i - p) else: f[i] = heights[i] * (i + 1) st.append(i) ans += sum(f) print(ans)