#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

const int MAX_S = 11;
int H, W;
char G[MAX_S][MAX_S];

int ctod[128];
char dtoc[4];

const static int dx[] = {1,0,-1,0};
const static int dy[] = {0,1,0,-1};

void init() {
  dtoc[0] = 'R';
  dtoc[1] = 'D';
  dtoc[2] = 'L';
  dtoc[3] = 'U';
  for(int i = 0; i < 4; ++i)
    ctod[dtoc[i]] = i;
}

int countStep() {
  int cnt = 0;
  for(int i = 0; i < H; ++i)
    for(int j = 0; j < W; ++j)
      cnt += G[i][j] == 'o';
  return cnt-1;
}

pair<int,int> getNextP(int x, int y, int dir) {
  const static pair<int,int> FAILD = make_pair(-1,-1);
  while(1) {
    x += dx[dir];
    y += dy[dir];
    if(x < 0 || x >= W) return FAILD;
    if(y < 0 || y >= H) return FAILD;
    if(G[y][x] == 'o') return make_pair(x,y);
  }
  return FAILD;
}

bool rec(int x, int y, int dir, int step, int maxStep, string &s) {
  if(step == maxStep) return true;
  for(int k = -1; k <= 1; ++k) {
    int ndir = ( dir + k + 4 ) % 4;
    pair<int,int> p = getNextP(x,y,ndir);
    if(p.first == -1 && p.second == -1) continue;
    int nx = p.first;
    int ny = p.second;

    G[y][x] = '.';
    s += dtoc[ndir];

    if(rec(nx,ny,ndir,step+1,maxStep,s)) return true;

    G[y][x] = 'o';
    int tmp = (int)s.size()-1;
    s.resize(tmp);
  }

  return false;
}

string solve(int sx, int sy, int sdir) {
  int step = countStep();
  string res = "";
  rec(sx,sy,sdir,0,step,res);
  return res;
}

int main() {
  init();
  while(cin >> H >> W && (H | W)) {
    int sx, sy, sdir;
    for(int i = 0; i < H; ++i) {
      for(int j = 0; j < W; ++j) {
	cin >> G[i][j];
	if(G[i][j] != '.' && G[i][j] != 'o') {
	  sx = j;
	  sy = i;
	  sdir = ctod[G[i][j]];
	  G[i][j] = 'o';
	}
      }
    }
    cout << solve(sx,sy,sdir) << endl;
  }
  return 0;
}