#include <bits/stdc++.h>
using namespace std;
template <class T>
void chmax(T& a, const T& b) {
  a = max(a, b);
}
template <class T>
void chmin(T& a, const T& b) {
  a = min(a, b);
}
template <class T>
void uniq(T& c) {
  sort(c.begin(), c.end());
  c.erase(unique(c.begin(), c.end()), c.end());
}
template <class T>
string to_s(const T& a) {
  ostringstream os;
  os << a;
  return os.str();
}
template <class T>
T to_T(const string& s) {
  istringstream is(s);
  T res;
  is >> res;
  return res;
}
template <typename T>
void print_container(ostream& os, const T& c) {
  const char* _s = " ";
  if (!c.empty()) {
    __typeof__(c.begin()) last = --c.end();
    for (__typeof__((c).begin()) it = (c).begin(); it != (c).end(); ++it) {
      os << *it;
      if (it != last) cout << _s;
    }
  }
}
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& c) {
  print_container(os, c);
  return os;
}
template <typename T>
ostream& operator<<(ostream& os, const set<T>& c) {
  print_container(os, c);
  return os;
}
template <typename T>
ostream& operator<<(ostream& os, const multiset<T>& c) {
  print_container(os, c);
  return os;
}
template <typename T>
ostream& operator<<(ostream& os, const deque<T>& c) {
  print_container(os, c);
  return os;
}
template <typename T, typename U>
ostream& operator<<(ostream& os, const map<T, U>& c) {
  print_container(os, c);
  return os;
}
template <typename T, typename U>
ostream& operator<<(ostream& os, const pair<T, U>& p) {
  os << "(" << p.first << ", " << p.second << ")";
  return os;
}
template <class T>
void print(T a, int n, const string& deli = " ", int br = 1) {
  for (int i = 0; i < n; ++i) {
    cout << a[i];
    if (i + 1 != n) cout << deli;
  }
  while (br--) cout << endl;
}
template <class T>
void print2d(T a, int w, int h, int width = -1, int br = 1) {
  for (int i = 0; i < h; ++i) {
    for (int j = 0; j < w; ++j) {
      if (width != -1) cout.width(width);
      cout << a[i][j] << ' ';
    }
    cout << endl;
  }
  while (br--) cout << endl;
}
template <class T>
void input(T& a, int n) {
  for (int i = 0; i < n; ++i) cin >> a[i];
}
template <class T>
void input(T* a, int n) {
  for (int i = 0; i < n; ++i) cin >> a[i];
}
void fix_pre(int n) {
  cout.setf(ios::fixed, ios::floatfield);
  cout.precision(10);
}
void fast_io() {
  cin.tie(0);
  ios::sync_with_stdio(false);
}
bool in_rect(int x, int y, int w, int h) {
  return 0 <= x && x < w && 0 <= y && y < h;
}
const int dx[] = {0, 1, 0, -1};
const int dy[] = {1, 0, -1, 0};
const double PI = acos(-1.0);
void next_states(const vector<char>& s, vector<vector<char> >& res) {
  for (int y = 0; y < (int)(s.size()); ++y) {
    if (s[y] != 3) {
      vector<char> t;
      for (;; ++y) {
        if (s[y] == 3) break;
        t.push_back(s[y]);
        if (y + 1 == s.size()) break;
      }
      assert(t.size() > 0);
      res.push_back(t);
    }
  }
}
map<vector<char>, int> dp;
int grundy(vector<char>& s) {
  if (dp.count(s)) return dp[s];
  set<int> next_g;
  for (int y = 0; y < (int)(s.size()); ++y)
    for (int x = 0; x < (int)(2); ++x) {
      if ((s[y] >> x & 1) == 0) {
        vector<char> t = s;
        t[y] |= (1LL << (x));
        for (int ty = max(0, y - 1); ty <= min((int)s.size() - 1, y + 1); ++ty)
          t[ty] |= (1LL << (1 - x));
        vector<vector<char> > nexts;
        next_states(t, nexts);
        int g = 0;
        for (int i = 0; i < (int)(nexts.size()); ++i) g ^= grundy(nexts[i]);
        next_g.insert(g);
      }
    }
  int cur_g = 0;
  while (next_g.count(cur_g)) ++cur_g;
  dp[s] = cur_g;
  for (int i = 0; i < (int)(s.size()); ++i) {
    if (s[i] == 1)
      s[i] = 2;
    else if (s[i] == 2)
      s[i] = 1;
  }
  dp[s] = cur_g;
  return cur_g;
}
int main() {
  int h, n;
  cin >> h >> n;
  vector<char> s(h);
  while (n--) {
    int y, x;
    cin >> y >> x;
    --x, --y;
    s[y] |= (1LL << (x));
    for (int ty = max(0, y - 1); ty <= min((int)s.size() - 1, y + 1); ++ty)
      s[ty] |= (1LL << (1 - x));
  }
  vector<vector<char> > v;
  next_states(s, v);
  int g = 0;
  for (int i = 0; i < (int)(v.size()); ++i) g ^= grundy(v[i]);
  bool win = g;
  string res = win ? "WIN" : "LOSE";
  cout << res << endl;
}
