#include <bits/stdc++.h>
using namespace std;
char field[101][101];
bool vis[101][101];
pair<pair<int, int>, char> parent[101][101];
int length, breadth;
void BreadthFirstSearch(int y, int x) {
  vis[y][x] = true;
  queue<pair<int, int> > BFS;
  BFS.push(make_pair(y, x));
  while (!BFS.empty()) {
    pair<int, int> cur = BFS.front();
    BFS.pop();
    if (cur.first > 1 && field[cur.first - 1][cur.second] != '*') {
      pair<int, int> next = make_pair(cur.first - 1, cur.second);
      if (!vis[next.first][next.second]) {
        vis[next.first][next.second] = true;
        parent[next.first][next.second].first = cur;
        parent[next.first][next.second].second = 'U';
        BFS.push(next);
      }
    }
    if (cur.first < length && field[cur.first + 1][cur.second] != '*') {
      pair<int, int> next = make_pair(cur.first + 1, cur.second);
      if (!vis[next.first][next.second]) {
        vis[next.first][next.second] = true;
        parent[next.first][next.second].first = cur;
        parent[next.first][next.second].second = 'D';
        BFS.push(next);
      }
    }
    if (cur.second > 1 && field[cur.first][cur.second - 1] != '*') {
      pair<int, int> next = make_pair(cur.first, cur.second - 1);
      if (!vis[next.first][next.second]) {
        vis[next.first][next.second] = true;
        parent[next.first][next.second].first = cur;
        parent[next.first][next.second].second = 'L';
        BFS.push(next);
      }
    }
    if (cur.second < breadth && field[cur.first][cur.second + 1] != '*') {
      pair<int, int> next = make_pair(cur.first, cur.second + 1);
      if (!vis[next.first][next.second]) {
        vis[next.first][next.second] = true;
        parent[next.first][next.second].first = cur;
        parent[next.first][next.second].second = 'R';
        BFS.push(next);
      }
    }
  }
}
int main() {
  cin >> length >> breadth;
  pair<int, int> end_coor;
  for (int y = 1; y <= length; y++) {
    while (getchar() != '\n')
      ;
    for (int x = 1; x <= breadth; x++) {
      field[y][x] = getchar();
      if (field[y][x] == 'F') end_coor.first = y, end_coor.second = x;
    }
  }
  bool up_down = true, left_right = true;
  pair<int, int> new_coor;
  bool find_out_left_right = false;
  if (field[1][2] != '*') {
    cout << "R" << endl;
    cin >> new_coor.first >> new_coor.second;
    if (field[new_coor.first][new_coor.second] == 'F') return 0;
    if (new_coor.second != 2)
      left_right = false;
    else {
      cout << "L" << endl;
      cin >> new_coor.first >> new_coor.second;
      if (field[new_coor.first][new_coor.second] == 'F') return 0;
    }
    find_out_left_right = true;
  }
  if (left_right) {
    bool find_out = false;
    while (!find_out) {
      if (field[2][new_coor.second] != '*') {
        cout << "D" << endl;
        cin >> new_coor.first >> new_coor.second;
        if (field[new_coor.first][new_coor.second] == 'F') return 0;
        if (new_coor.first != 2) up_down = false;
        find_out = true;
        break;
      }
      cout << "R" << endl;
      cin >> new_coor.first >> new_coor.second;
      if (field[new_coor.first][new_coor.second] == 'F') return 0;
    }
  } else {
    bool find_out = false;
    while (!find_out) {
      if (field[2][new_coor.second] != '*') {
        cout << "D" << endl;
        cin >> new_coor.first >> new_coor.second;
        if (field[new_coor.first][new_coor.second] == 'F') return 0;
        if (new_coor.first != 2) up_down = false;
        find_out = true;
        break;
      }
      cout << "L" << endl;
      cin >> new_coor.first >> new_coor.second;
      if (field[new_coor.first][new_coor.second] == 'F') return 0;
    }
  }
  if (!find_out_left_right) {
    if (up_down) {
      bool find_out = false;
      while (!find_out) {
        if (field[new_coor.first][2] != '*') {
          cout << "R" << endl;
          cin >> new_coor.first >> new_coor.second;
          if (field[new_coor.first][new_coor.second] == 'F') return 0;
          if (new_coor.second != 2) left_right = false;
          find_out = true;
          break;
        }
        cout << "D" << endl;
        cin >> new_coor.first >> new_coor.second;
        if (field[new_coor.first][new_coor.second] == 'F') return 0;
      }
    } else {
      bool find_out = false;
      while (!find_out) {
        if (field[new_coor.first][2] != '*') {
          cout << "R" << endl;
          cin >> new_coor.first >> new_coor.second;
          if (field[new_coor.first][new_coor.second] == 'F') return 0;
          if (new_coor.second != 2) left_right = false;
          find_out = true;
          break;
        }
        cout << "U" << endl;
        cin >> new_coor.first >> new_coor.second;
        if (field[new_coor.first][new_coor.second] == 'F') return 0;
      }
    }
  }
  BreadthFirstSearch(new_coor.first, new_coor.second);
  string answer_rev = "";
  pair<int, int> stored = end_coor;
  while (stored.first != new_coor.first || stored.second != new_coor.second) {
    answer_rev.push_back(parent[stored.first][stored.second].second);
    stored = parent[stored.first][stored.second].first;
  }
  if (!up_down) {
    for (int i = 0; i < answer_rev.length(); i++) {
      if (answer_rev.at(i) == 'U')
        answer_rev.at(i) = 'D';
      else if (answer_rev.at(i) == 'D')
        answer_rev.at(i) = 'U';
    }
  }
  if (!left_right) {
    for (int i = 0; i < answer_rev.length(); i++) {
      if (answer_rev.at(i) == 'L')
        answer_rev.at(i) = 'R';
      else if (answer_rev.at(i) == 'R')
        answer_rev.at(i) = 'L';
    }
  }
  reverse(answer_rev.begin(), answer_rev.end());
  for (int i = 0; i < answer_rev.length(); i++) {
    cout << answer_rev.at(i) << endl;
    cin >> new_coor.first >> new_coor.second;
    if (field[new_coor.first][new_coor.second] == 'F') return 0;
  }
}
