#include <bits/stdc++.h>
using namespace std;
inline long long getint() {
  long long _x = 0, _tmp = 1;
  char _tc = getchar();
  while ((_tc < '0' || _tc > '9') && _tc != '-') _tc = getchar();
  if (_tc == '-') _tc = getchar(), _tmp = -1;
  while (_tc >= '0' && _tc <= '9') _x *= 10, _x += (_tc - '0'), _tc = getchar();
  return _x * _tmp;
}
inline long long add(long long _x, long long _y,
                     long long _mod = 1000000007ll) {
  long long _ = _x + _y;
  if (_ >= _mod) _ -= _mod;
  return _;
}
inline long long sub(long long _x, long long _y,
                     long long _mod = 1000000007ll) {
  long long _ = _x - _y;
  if (_ < 0) _ += _mod;
  return _;
}
inline long long mul(long long _x, long long _y,
                     long long _mod = 1000000007ll) {
  long long _ = _x * _y;
  if (_ >= _mod) _ %= _mod;
  return _;
}
long long mypow(long long _a, long long _x, long long _mod) {
  if (_x == 0) return 1ll;
  long long _tmp = mypow(_a, _x / 2, _mod);
  _tmp = mul(_tmp, _tmp, _mod);
  if (_x & 1) _tmp = mul(_tmp, _a, _mod);
  return _tmp;
}
long long mymul(long long _a, long long _x, long long _mod) {
  if (_x == 0) return 0ll;
  long long _tmp = mymul(_a, _x / 2, _mod);
  _tmp = add(_tmp, _tmp, _mod);
  if (_x & 1) _tmp = add(_tmp, _a, _mod);
  return _tmp;
}
inline bool equal(double _x, double _y) {
  return _x > _y - 1e-9 && _x < _y + 1e-9;
}
int __ = 1, _cs;
int n, m;
char c[50][50];
void build() {}
bool got[50][50][50][50];
int gd[50][50][50][50];
void init() {
  n = getint();
  m = getint();
  for (int i = 0; i <= n; i++) scanf("%s", c[i]);
}
inline pair<int, int> trans(int mi, int su) {
  if ((mi + su) % 2) return make_pair(-1, -1);
  if ((su - mi) % 2) return make_pair(-1, -1);
  return make_pair((mi + su) / 2, (su - mi) / 2);
}
int DP(int u, int d, int l, int r, int pt) {
  if (got[u + m][d][l][r]) return gd[u + m][d][l][r];
  got[u + m][d][l][r] = true;
  set<int> S;
  for (int i = u; i <= d; i++)
    for (int j = l; j <= r; j++) {
      if (j % 2 != pt % 2) continue;
      pair<int, int> tp = trans(i, j);
      int xn = tp.first, xm = tp.second;
      if (xn < 0 || xn >= n || xm < 0 || xm >= m) continue;
      if (c[xn][xm] == 'L')
        S.insert(DP(u, d, l, j - 1, pt) ^ DP(u, d, j + 1, r, pt));
      else if (c[xn][xm] == 'R')
        S.insert(DP(u, i - 1, l, r, pt) ^ DP(i + 1, d, l, r, pt));
      else
        S.insert(DP(u, i - 1, l, j - 1, pt) ^ DP(u, i - 1, j + 1, r, pt) ^
                 DP(i + 1, d, l, j - 1, pt) ^ DP(i + 1, d, j + 1, r, pt));
    }
  int xx = 0;
  while (S.count(xx)) xx++;
  return gd[u + m][d][l][r] = xx;
}
int SG(int pt) {
  for (int i = 0; i < 50; i++)
    for (int j = 0; j < 50; j++)
      for (int i2 = 0; i2 < 50; i2++)
        for (int j2 = 0; j2 < 50; j2++) got[i][j][i2][j2] = false;
  return DP(-m + 1, n - 1, 0, n + m - 2, pt);
}
void solve() { puts(SG(0) == SG(1) ? "LOSE" : "WIN"); }
int main() {
  build();
  while (__--) {
    init();
    solve();
  }
}
