#include <bits/stdc++.h>
using namespace std; 
int n, m;
char c[2005][2005]; 
int vis[2005][2005]; 
bool ok(int i, int j) {
    return i >= 1 && i <= n && j >= 1 && j <= m; 
}
struct tn {
    int x, y;
    char before;
};
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            cin >> c[i][j]; 
        }
    }
    map<char, pair<int, int>> mp;
    mp['D'] = {1, 0};
    mp['R'] = {0, 1};
    mp['U'] = {-1, 0};
    mp['L'] = {0, -1}; 
    queue<tn> q;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            if (c[i][j] != '#' && c[i][j] != '.') {
                q.push({i, j, 'F'}); 
                vis[i][j]++; 
            }
        }
    }
    while (q.size()) {
        int x = q.front().x;
        int y = q.front().y;
        char before = q.front().before;
        q.pop();
        if (c[x][y] == '.') {
            int nx = x + mp[before].first;
            int ny = y + mp[before].second;
            if (ok(nx, ny)) {
                if (c[nx][ny] == '#') {
                    vis[nx][ny]++; 
                }
                else {
                    if (c[nx][ny] != '.') {
                        if (vis[nx][ny] == 0) {
                            vis[nx][ny]++;
                            q.push({nx, ny, before});
                        }
                    }
                    else {
                        if (vis[nx][ny] < 4) {
                            vis[nx][ny]++;
                            q.push({nx, ny, before}); 
                        }
                    }
                }
            }
        }
        else {
            int nx = mp[c[x][y]].first + x;
            int ny = mp[c[x][y]].second + y; 
            if (ok(nx, ny)) {
                if (c[nx][ny] == '#') {
                    vis[nx][ny]++;
                } 
                else { 
                    if (c[nx][ny] != '.') {
                        if (vis[nx][ny] == 0) {
                            vis[nx][ny]++;
                            q.push({nx, ny, c[x][y]}); 
                        }
                    }
                    else {
                        if (vis[nx][ny] < 4) {
                            vis[nx][ny]++;
                            q.push({nx, ny, c[x][y]}); 
                        }
                    }
                }
            }
        }
    }
    int ans = 0;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            if (c[i][j] == '#') {
                if (vis[i][j] > 0) {
                    ans++;
                }
            }
        }
    }
    cout << ans << '\n'; 
    return 0;
}

/*
break
could
misty
phone
deads
*/
