#include <bits/stdc++.h>
using namespace std;
struct mexer {
  vector<int> vals;
  void add(int w) { vals.push_back(w); }
  int mex() {
    sort(vals.begin(), vals.end());
    for (int i = 0;; ++i)
      if (!binary_search(vals.begin(), vals.end(), i)) return i;
  }
};
int sg[110][3][3];
int eval_sg(int len, int lo, int hi) {
  if (sg[len][lo][hi] != -1) return sg[len][lo][hi];
  int& val = sg[len][lo][hi];
  if (len == 0) return val = 0;
  mexer use;
  for (int pos = 0; pos < len; ++pos)
    for (int sd = 1; sd <= 2; ++sd) {
      if (pos == 0 && sd == lo) continue;
      if (pos == len - 1 && sd == hi) continue;
      int lo_len = pos, hi_len = len - pos - 1;
      int lo_lo = lo, lo_hi = 3 - sd;
      int hi_lo = 3 - sd, hi_hi = hi;
      use.add(eval_sg(lo_len, lo_lo, lo_hi) ^ eval_sg(hi_len, hi_lo, hi_hi));
    }
  return val = use.mex();
}
int R, N;
int T[110][2];
int get_val(int plo, int phi) {
  int len = phi - plo - 1;
  int lo = 0, hi = 0;
  if (plo >= 0) lo = T[plo][0] ? 2 : 1;
  if (phi < R) hi = T[phi][0] ? 2 : 1;
  return eval_sg(len, lo, hi);
}
int main() {
  memset(sg, -1, sizeof sg);
  scanf("%d%d", &R, &N);
  for (int i = 0; i < N; ++i) {
    int r, c;
    scanf("%d%d", &r, &c);
    --r, --c;
    T[r][c] = 1;
  }
  int plo = -1;
  int SG = 0;
  for (int i = 0; i < R; ++i)
    if (T[i][0] + T[i][1]) {
      SG ^= get_val(plo, i);
      plo = i;
    }
  SG ^= get_val(plo, R);
  puts(SG ? "WIN" : "LOSE");
  return 0;
}
