#include <bits/stdc++.h>
using namespace std;
const int N = 108;
const int dx[4] = {0, 0, -1, 1};
const int dy[4] = {-1, 1, 0, 0};
int a[N][N];
int dis[N][N];
int tx, ty;
int cx, cy;
queue<pair<int, int> > Q;
pair<int, int> write(int dir) {
  switch (dir) {
    case 0:
      cout << "L" << endl;
      break;
    case 1:
      cout << "R" << endl;
      break;
    case 2:
      cout << "U" << endl;
      break;
    case 3:
      cout << 'D' << endl;
      break;
  }
  fflush(stdout);
  int x, y;
  cin >> x >> y;
  if (x == tx && y == ty) exit(0);
  return pair<int, int>(x, y);
}
int main() {
  cin.sync_with_stdio(0);
  int n, m;
  cin >> n >> m;
  for (int i = 1; i <= n; ++i) {
    string s;
    cin >> s;
    for (int j = 1; j <= m; ++j) {
      switch (s[j - 1]) {
        case '.':
          a[i][j] = 0;
          break;
        case '*':
          a[i][j] = -1;
          break;
        case 'F': {
          a[i][j] = 0;
          tx = i;
          ty = j;
        } break;
      }
    }
  }
  if (~a[1][2]) {
    pair<int, int> t = write(1);
    if (t.second == 2) {
      cy = 0;
      write(0);
    } else {
      cy = 1;
    }
    int tmp = 0;
    while (1) {
      if (~a[2][tmp + 1]) break;
      tmp++;
      write(1 ^ cy);
    }
    t = write(3);
    if (t.first == 2) {
      cx = 0;
      write(2);
    } else {
      cx = 1;
    }
    for (int i = 1; i <= tmp; ++i) write(0 ^ cy);
  } else {
    pair<int, int> t = write(3);
    if (t.first == 2) {
      cx = 0;
      write(2);
    } else {
      cx = 1;
    }
    int tmp = 0;
    while (1) {
      if (~a[tmp + 1][2]) break;
      tmp++;
      write(3 ^ cx);
    }
    t = write(1);
    if (t.second == 2) {
      cy = 0;
      write(0);
    } else {
      cy = 1;
    }
    for (int i = 1; i <= tmp; ++i) write(2 ^ cx);
  }
  memset(dis, -1, sizeof(dis));
  Q.push(pair<int, int>(tx, ty));
  dis[tx][ty] = 0;
  while (!Q.empty()) {
    pair<int, int> p = Q.front();
    Q.pop();
    for (int i = 0; i < 4; ++i) {
      int vx = p.first + dx[i];
      int vy = p.second + dy[i];
      if (vx >= 1 && vx <= n && vy >= 1 && vy <= m && ~a[vx][vy] &&
          dis[vx][vy] == -1) {
        dis[vx][vy] = dis[p.first][p.second] + 1;
        Q.push(pair<int, int>(vx, vy));
      }
    }
  }
  int nowx = 1, nowy = 1;
  while (nowx != tx || nowy != ty) {
    for (int i = 0; i < 4; ++i) {
      int vx = nowx + dx[i];
      int vy = nowy + dy[i];
      if (vx >= 1 && vx <= n && vy >= 1 && vy <= m && ~a[vx][vy] &&
          dis[vx][vy] == dis[nowx][nowy] - 1) {
        nowx = vx;
        nowy = vy;
        if (i <= 1)
          write(i ^ cy);
        else
          write(i ^ cx);
        break;
      }
    }
  }
}
