2589
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
int l, w;
char map[50][50];
int dx[4] = { -1,1,0,0 };
int dy[4] = { 0,0,-1,1 };
int bfs(int x, int y) {
int dist = 0;
bool visit[50][50] = { false, };
queue<pair<pair<int, int>, int> > q;
visit[x][y] = true;
q.push(make_pair(make_pair(x, y), 0));
while (!q.empty()) {
int qx = q.front().first.first;
int qy = q.front().first.second;
int cnt = q.front().second;
q.pop();
dist = max(dist, cnt);
for (int i = 0; i < 4; i++) {
int tmpx = qx + dx[i];
int tmpy = qy + dy[i];
if (tmpx < 0 || tmpx >= l || tmpy < 0 || tmpy >= w) continue;
if (!visit[tmpx][tmpy] && map[tmpx][tmpy]=='L') {
visit[tmpx][tmpy] = true;
q.push(make_pair(make_pair(tmpx, tmpy), cnt + 1));
}
}
}
return dist;
}
int main() {
cin >> l >> w;
for (int i = 0; i < l; i++) {
for (int j = 0; j < w; j++) {
cin >> map[i][j];
}
}
int answer = 0;
for (int i = 0; i < l; i++) {
for (int j = 0; j < w; j++) {
if (map[i][j] == 'L') {
answer = max(bfs(i, j), answer);
}
}
}
cout << answer;
}