#include<iostream>
#include<queue>
#include<vector>
using namespace std;
const int maxn = 1e3 + 15;
int n,m,ans,sx,sy,ax[5] = {0,1,-1,0,0},ay[5] = {0,0,0,1,-1};
bool vis[maxn][maxn];
char mp[maxn][maxn];
struct node{
int x,y;
};
int main(){
vector<node> s;
cin >> n >> m;
for(int i = 1;i <= n;i++){
for(int j = 1;j <= m;j++){
cin >> mp[i][j];
if(mp[i][j] == 'o') s.push_back({i,j});
}
}
queue<node> q;
for(int i = 0;i < s.size();i++){
q.push(s[i]);
vis[s[i].x][s[i].y] = 1;
}
while(!q.empty()){
node r = q.front();
q.pop();
vis[r.x][r.y] = 1;
ans++;
for(int i = 1;i <= 4;i++){
int nx = r.x + ax[i],ny = r.y + ay[i];
if(nx < 1 || ny < 1 || nx > n || ny > m || vis[nx][ny]) continue;
if((i == 1 && mp[nx][ny] == 'u') || (i == 2 && mp[nx][ny] == 'd') || (i == 3 && mp[nx][ny] == 'l') || (i == 4 && mp[nx][ny] == 'r')){
q.push({nx,ny});
vis[nx][ny] = 1;
}
}
}
cout << ans;
return 0;
}