#include <bits/stdc++.h>
using namespace std;
class C_ {};
template <typename T>
C_& operator<<(C_& __m, const T& __s) {
  if (!1) cerr << "\E[91m" << __s << "\E[0m";
  return __m;
}
C_ merr;
struct __s {
  __s() {
    if (1) {
      ios_base::Init i;
      cin.sync_with_stdio(0);
      cin.tie(0);
    }
  }
  ~__s() {
    merr << "Execution time: " << (double)clock() / CLOCKS_PER_SEC << " s.\n";
  }
} __S;
char A[2222][2222];
bool u[2222][2222];
int n, m;
bool check(int x, int y) {
  int i = x, j = y;
  int cnt = 0;
  if (!(0 <= x && x < n) || !(0 <= y && y < m) || A[x][y] != '.') return false;
  cnt += (i == 0 || A[i - 1][j] != '.');
  cnt += (j == 0 || A[i][j - 1] != '.');
  cnt += (i == n - 1 || A[i + 1][j] != '.');
  cnt += (j == m - 1 || A[i][j + 1] != '.');
  return !u[i][j] && cnt == 3;
}
void add(queue<pair<int, int> >& Q, int x, int y) {
  if (check(x, y)) {
    Q.push(make_pair(x, y));
    u[x][y] = 1;
  }
}
int main() {
  int left = 0;
  queue<pair<int, int> > Q;
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    for (int j = 0; j < m; j++) {
      A[i][j] = s[j];
      if (A[i][j] == '.') {
        left++;
      }
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (A[i][j] != '.') continue;
      add(Q, i, j);
    }
  }
  while (Q.size()) {
    int x = Q.front().first, y = Q.front().second;
    Q.pop();
    if (A[x][y] != '.') continue;
    if (x != n - 1 && A[x + 1][y] == '.') {
      A[x][y] = '^';
      A[x + 1][y] = 'v';
      left -= 2;
      add(Q, x - 1, y);
      add(Q, x, y - 1);
      add(Q, x, y + 1);
      add(Q, x + 1, y - 1);
      add(Q, x + 1, y + 1);
      add(Q, x + 2, y);
    } else if (x != 0 && A[x - 1][y] == '.') {
      A[x - 1][y] = '^';
      A[x][y] = 'v';
      left -= 2;
      add(Q, x - 2, y);
      add(Q, x, y - 1);
      add(Q, x, y + 1);
      add(Q, x - 1, y - 1);
      add(Q, x - 1, y + 1);
      add(Q, x + 1, y);
    } else if (y != m - 1 && A[x][y + 1] == '.') {
      A[x][y] = '<';
      A[x][y + 1] = '>';
      left -= 2;
      add(Q, x, y - 1);
      add(Q, x - 1, y);
      add(Q, x - 1, y + 1);
      add(Q, x + 1, y);
      add(Q, x + 1, y + 1);
      add(Q, x + 2, y);
    } else if (y != 0 && A[x][y - 1] == '.') {
      A[x][y - 1] = '<';
      A[x][y] = '>';
      left -= 2;
      add(Q, x, y - 2);
      add(Q, x - 1, y);
      add(Q, x - 1, y - 1);
      add(Q, x + 1, y);
      add(Q, x + 1, y - 1);
      add(Q, x + 2, y);
    }
    for (int dx = -3; dx <= 3; dx++) {
      for (int dy = -3; dy <= 3; dy++) {
        add(Q, x + dx, y + dy);
      }
    }
  }
  if (left != 0) {
    cout << "Not unique" << '\n';
    return 0;
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      cout << A[i][j];
    }
    cout << '\n';
  }
  return 0;
}
