#include <bits/stdc++.h>
using namespace std;
using namespace placeholders;
template <class T>
void mini(T &l, T r) {
  l = min(l, r);
}
template <class T>
void maxi(T &l, T r) {
  l = max(l, r);
}
template <class TH>
void _dbg(const char *sdbg, TH h) {
  cerr << sdbg << "=" << h << "\n";
}
template <class TH, class... TA>
void _dbg(const char *sdbg, TH h, TA... a) {
  while (*sdbg != ',') cerr << *sdbg++;
  cerr << "=" << h << ",";
  _dbg(sdbg + 1, a...);
}
template <class T>
ostream &operator<<(ostream &os, vector<T> v) {
  os << "[";
  for (auto vv : v) os << vv << ",";
  return os << "]";
}
template <class L, class R>
ostream &operator<<(ostream &os, pair<L, R> p) {
  return os << "(" << p.first << "," << p.second << ")";
}
const int N = 110;
bool used[N][2];
int n, m;
int hash_code(int row) { return (used[row][0] << 1) + used[row][1]; }
int dp[N][N][256];
int sg(int row1, int row2) {
  int hash1 = hash_code(row1) * 4 + hash_code(row1 + 1);
  int hash2 = hash_code(row2 - 1) * 4 + hash_code(row2);
  int hash = hash1 * 16 + hash2;
  int &ret = dp[row1][row2][hash];
  if (ret != -1) return ret;
  bool have[N] = {};
  for (int r = row1; r <= row2; ++r) {
    for (int c = 0; c < 2; ++c) {
      if (used[r][c]) continue;
      if (r > row1 && used[r - 1][1 - c]) continue;
      if (used[r][1 - c]) continue;
      if (r < row2 && used[r + 1][1 - c]) continue;
      used[r][c] = true;
      have[sg(row1, r) ^ sg(r, row2)] = true;
      used[r][c] = false;
    }
  }
  for (int i = 0; i < N; ++i)
    if (!have[i]) return ret = i;
  return -1;
}
void run() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m; ++i) {
    int r, c;
    scanf("%d%d", &r, &c);
    --r, --c;
    used[r][c] = true;
  }
  memset(dp, -1, sizeof(dp));
  puts(sg(0, n - 1) ? "WIN" : "LOSE");
}
int main() {
  run();
  return 0;
}
