typedef long long ll;
typedef unsigned long long ull;
#include <iostream>
#include <stdio.h>
#include <memory.h>
#include <algorithm>
#include <vector>
#include <cmath>
#include <bitset>
#include <string>
#include <cstring>
#include <iomanip>
#include <valarray>
#include <sstream>
#include <fstream>
#include <functional>
#include <utility>
#include <numeric>
#include <iterator>
#include <set>
#include <map>
#include <queue>
using namespace std;
#define sz(v) (int)v.size()
#define rsz(v,r) v.resize(r)
#define clr(v) v.clear()
#define vi vector<int>
#define ii pair<int, int>
#define vvi vector<vector<int>>
#define vb vector<bool>
#define vvb vector<vector<bool>>
#define vc vector<char>
#define vvc vector<vector <char> >
#define vs vector<string>
#define lop(i,n) for(int i=0; i<n; i++)
#define rlop(i,n) for(int i=n-1; i>=0; i--)
#define loop(i,start,n) for(int i=start; i<n; i++)
#define rloop(i,start,n) for(int i=n-1; i>=end; i--)
#define in(u) int u; cin>>u;
#define inc(u) char u; cin>>u;
int width, hight;
int xi, yi;
vvc graph;
bool visi[10][10];
char dirc;
int curr = 0;
void find(char c)
{
if (c == 'U')
{
xi = -1;
yi = 0;
}
else if (c =='R')
{
xi = 0;
yi = 1;
}
else if (c == 'D')
{
xi = 1;
yi = 0;
}
else if (c=='L')
{
xi = 0;
yi = -1;
}
else
{
xi = 0;
yi = 0;
}
}
bool ill(int i, int j)
{
return (i > -1 && j > -1 && i < hight &&j < width && graph[i][j] !='*');
}
void changedic()
{
if (dirc == 'U')
dirc = 'R';
else if (dirc == 'R')
dirc = 'D';
else if (dirc == 'D')
dirc = 'L';
else dirc = 'U';
}
void dfs(int i, int j)
{
if (visi[i][j] && graph[i][j] == dirc)
return;
if (!visi[i][j])
{
curr++;
visi[i][j] = true;
}
lop(k,4)
{
find(dirc);
if (ill(i+xi,j+yi))
{
int x = xi;
int y = yi;
find(graph[i+x][j+y]);
if (x + xi != 0 || y + yi != 0 )
{
graph[i][j] = dirc;
dfs(i + x, j + y);
break;
}
}
changedic();
}
}
int main()
{
cin >> hight >> width;
rsz(graph, hight);
lop(i, hight)
{
lop(j, width)
{
inc(u);
graph[i].push_back(u);
visi[i][j] = false;
if (u != '.'&& u != '*')
{
xi = i;
yi = j;
dirc = u;
}
}
}
dfs(xi, yi);
cout << curr << endl;
}
dHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVsbDsKCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtZW1vcnkuaD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8Yml0c2V0PgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGlvbWFuaXA+CiNpbmNsdWRlIDx2YWxhcnJheT4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDxmc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KI2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDxudW1lcmljPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxzZXQ+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxxdWV1ZT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgc3oodikgKGludCl2LnNpemUoKQojZGVmaW5lIHJzeih2LHIpIHYucmVzaXplKHIpCiNkZWZpbmUgY2xyKHYpIHYuY2xlYXIoKQojZGVmaW5lIHZpIHZlY3RvcjxpbnQ+CiNkZWZpbmUgaWkgcGFpcjxpbnQsIGludD4KI2RlZmluZSB2dmkgdmVjdG9yPHZlY3RvcjxpbnQ+PgojZGVmaW5lIHZiIHZlY3Rvcjxib29sPgojZGVmaW5lIHZ2YiB2ZWN0b3I8dmVjdG9yPGJvb2w+PgojZGVmaW5lIHZjIHZlY3RvcjxjaGFyPgojZGVmaW5lIHZ2YyB2ZWN0b3I8dmVjdG9yIDxjaGFyPiA+CiNkZWZpbmUgdnMgdmVjdG9yPHN0cmluZz4KI2RlZmluZSBsb3AoaSxuKSBmb3IoaW50IGk9MDsgaTxuOyBpKyspCiNkZWZpbmUgcmxvcChpLG4pIGZvcihpbnQgaT1uLTE7IGk+PTA7IGktLSkKI2RlZmluZSBsb29wKGksc3RhcnQsbikgZm9yKGludCBpPXN0YXJ0OyBpPG47IGkrKykKI2RlZmluZSBybG9vcChpLHN0YXJ0LG4pIGZvcihpbnQgaT1uLTE7IGk+PWVuZDsgaS0tKQojZGVmaW5lIGluKHUpIGludCB1OyBjaW4+PnU7CiNkZWZpbmUgaW5jKHUpIGNoYXIgdTsgY2luPj51OwoKCmludCB3aWR0aCwgaGlnaHQ7CmludCB4aSwgeWk7CnZ2YyBncmFwaDsKYm9vbCB2aXNpWzEwXVsxMF07CmNoYXIgZGlyYzsKaW50IGN1cnIgPSAwOwoKdm9pZCBmaW5kKGNoYXIgYykKewoJaWYgKGMgPT0gJ1UnKQoJewoJCXhpID0gLTE7CgkJeWkgPSAwOwoJfQoJZWxzZSBpZiAoYyA9PSdSJykKCXsKCQl4aSA9IDA7CgkJeWkgPSAxOwoJfQoJZWxzZSBpZiAoYyA9PSAnRCcpCgl7CgkJeGkgPSAxOwoJCXlpID0gMDsKCX0KCWVsc2UgaWYgKGM9PSdMJykKCXsKCQl4aSA9IDA7CgkJeWkgPSAtMTsKCX0KCWVsc2UKCXsKCQl4aSA9IDA7CgkJeWkgPSAwOwoJfQp9Cgpib29sIGlsbChpbnQgaSwgaW50IGopCnsKCXJldHVybiAoaSA+IC0xICYmIGogPiAtMSAmJiBpIDwgaGlnaHQgJiZqIDwgd2lkdGggJiYgZ3JhcGhbaV1bal0gIT0nKicpOwp9Cgp2b2lkIGNoYW5nZWRpYygpCnsKCWlmIChkaXJjID09ICdVJykKCQlkaXJjID0gJ1InOwoJZWxzZSBpZiAoZGlyYyA9PSAnUicpCgkJZGlyYyA9ICdEJzsKCWVsc2UgaWYgKGRpcmMgPT0gJ0QnKQoJCWRpcmMgPSAnTCc7CgllbHNlIGRpcmMgPSAnVSc7Cn0KCnZvaWQgZGZzKGludCBpLCBpbnQgaikKewoJaWYgKHZpc2lbaV1bal0gJiYgZ3JhcGhbaV1bal0gPT0gZGlyYykKCQlyZXR1cm47CglpZiAoIXZpc2lbaV1bal0pCgl7CgkJY3VycisrOwoJCXZpc2lbaV1bal0gPSB0cnVlOwoJfQoKCWxvcChrLDQpCgl7CgkJZmluZChkaXJjKTsKCQlpZiAoaWxsKGkreGksait5aSkpCgkJewoJCQlpbnQgeCA9IHhpOwoJCQlpbnQgeSA9IHlpOwoJCQlmaW5kKGdyYXBoW2kreF1bait5XSk7CgkJCWlmICh4ICsgeGkgIT0gMCB8fCB5ICsgeWkgIT0gMCApCgkJCXsKCQkJCWdyYXBoW2ldW2pdID0gZGlyYzsKCQkJCWRmcyhpICsgeCwgaiArIHkpOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJY2hhbmdlZGljKCk7Cgl9IAp9CgoKCmludCBtYWluKCkKewoJY2luID4+IGhpZ2h0ID4+IHdpZHRoOwoJcnN6KGdyYXBoLCBoaWdodCk7Cglsb3AoaSwgaGlnaHQpCgl7CgkJbG9wKGosIHdpZHRoKQoJCXsKCQkJaW5jKHUpOwoJCQlncmFwaFtpXS5wdXNoX2JhY2sodSk7CgkJCXZpc2lbaV1bal0gPSBmYWxzZTsKCQkJaWYgKHUgIT0gJy4nJiYgdSAhPSAnKicpCgkJCXsKCQkJCXhpID0gaTsKCQkJCXlpID0gajsKCQkJCWRpcmMgPSB1OwoJCQl9CgkJfQoJfQoJZGZzKHhpLCB5aSk7Cgljb3V0IDw8IGN1cnIgPDwgZW5kbDsKCn0K