#include <bits/stdc++.h>
using namespace std;
const int N = 105;
string grid[N];
int X = 1, Y = 1;
int NX = 1, NY = 1;
bool f1, f2;
void query(char ch, bool f = 0) {
  if (f) {
    if (ch == 'U')
      ch = 'D';
    else if (ch == 'D')
      ch = 'U';
    else if (ch == 'L')
      ch = 'R';
    else
      ch = 'L';
  }
  cout << ch << endl;
  cin >> NX >> NY;
  if (grid[NX][NY] == 'F') exit(0);
}
bool vis[N][N];
char dir[] = "UDLR";
int dx[] = {-1, +1, 0, 0};
int dy[] = {0, 0, -1, +1};
pair<int, int> par[N][N];
int mov[N][N];
int n, m;
void bfs(int x, int y) {
  queue<pair<int, int>> que;
  que.push({x, y});
  vis[x][y] = 1;
  while (!que.empty()) {
    pair<int, int> tp = que.front();
    que.pop();
    int x = tp.first, y = tp.second;
    for (int k = 0; k < 4; k++) {
      int x_ = x + dx[k], y_ = y + dy[k];
      if (x_ >= 1 && x_ <= n && y_ >= 1 && y_ <= m && vis[x_][y_] == 0 &&
          grid[x_][y_] != '#') {
        vis[x_][y_] = 1;
        que.push({x_, y_});
        par[x_][y_] = {x, y};
        mov[x_][y_] = k;
      }
    }
  }
  int d_x, d_y;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      if (grid[i][j] == 'F') d_x = i, d_y = j;
  string path;
  while (d_x != x or d_y != y) {
    path.push_back(dir[mov[d_x][d_y]]);
    pair<int, int> t = par[d_x][d_y];
    d_x = t.first, d_y = t.second;
  }
  for (int i = (int)path.size() - 1; i >= 0; i--) {
    if (path[i] == 'U' or path[i] == 'D')
      query(path[i], f2);
    else
      query(path[i], f1);
  }
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    cin >> grid[i];
    grid[i] = "&" + grid[i];
    for (int j = 1; j <= m; j++)
      if (grid[i][j] == '*') grid[i][j] = '#';
  }
  if (m == 1) {
    query('U');
    if (NX == 1) {
      while (true) {
        query('D');
      }
    } else {
      while (true) {
        query('U');
      }
    }
  }
  if (n == 1) {
    query('L');
    if (NY == 1) {
      while (true) query('R');
    } else {
      while (true) query('L');
    }
  }
  if (grid[1][2] != '#') {
    query('L');
    if (NY == 2) {
      f1 = 1;
      if (grid[2][2] != '#') {
        query('U');
        if (NX == 2) {
          f2 = 1;
        }
        bfs(NX, NY);
      } else if (grid[2][1] != '#') {
        query('L', f1);
        query('U');
        if (NX == 2) {
          f2 = 1;
        }
        bfs(NX, NY);
      } else {
        for (int i = 3; i <= m; i++) {
          query('R', f1);
          if (grid[2][i] != '#') {
            query('U');
            if (NX == 2) f2 = 1;
            bfs(NX, NY);
          }
        }
      }
    } else {
      for (int i = 1; i <= m; i++) {
        if (grid[2][i] != '#') {
          query('U');
          if (NX == 2) {
            f2 = 1;
          }
          bfs(NX, NY);
        }
        query('R');
      }
    }
  } else {
    query('U');
    if (NX == 2) {
      f2 = 1;
      if (grid[2][2] != '#') {
        query('L');
        if (NY == 2) {
          f1 = 1;
        }
        bfs(NX, NY);
      } else if (grid[1][2] != '#') {
        query('U', f2);
        query('L');
        if (NY == 2) {
          f1 = 1;
        }
        bfs(NX, NY);
      } else {
        for (int i = 3; i <= n; i++) {
          query('D', f2);
          if (grid[i][2] != '#') {
            query('L');
            if (NY == 2) f1 = 1;
            bfs(NX, NY);
          }
        }
      }
    } else {
      for (int i = 1; i <= n; i++) {
        if (grid[i][2] != '#') {
          query('L');
          if (NY == 2) {
            f1 = 1;
          }
          bfs(NX, NY);
        }
        query('D');
      }
    }
  }
  return 0;
}
