// Original C++ solution (slower):
#include <bits/stdc++.h>

#include <vector>

#include <numeric>

#define PI 3.14159265358979323846

#define MAXINF (1e18L)

#define INF (1e9L)

#define EPS (1e-9)

#define MOD ((ll)(1e9+7))

#define REP(i, n) for(int i=0;i<int(n);++i)

#define Rep(i,sta,n) for(int i=sta;i<n;i++)

#define RREP(i, n) for(int i=int(n)-1;i>=0;--i)

#define ALL(v) v.begin(),v.end()

#define FIND(v,x) (binary_search(ALL(v),(x)))

#define SORT(v) sort(ALL(v))

#define RSORT(v) sort(ALL(v));reverse(ALL(v))

#define DEBUG(x) cerr<<#x<<": "<<x<<endl;

#define DEBUG_VEC(v) cerr<<#v<<":";for(int i=0;i<v.size();i++) cerr<<" "<<v[i]; cerr<<endl

#define Yes(n) cout<<((n)?"Yes":"No")<<endl

#define YES(n) cout<<((n)?"YES":"NO")<<endl

#define pb push_back

#define fi first

#define se second

using namespace std;

template<class A>void pr(A a){cout << (a) << endl;}

template<class A,class B>void pr(A a,B b){cout << a << " "  ;pr(b);}

template<class A,class B,class C>void pr(A a,B b,C c){cout << a << " " ;pr(b,c);}

template<class A,class B,class C,class D>void pr(A a,B b,C c,D d){cout << a << " " ;pr(b,c,d);}

template<class T> inline bool chmin(T& a, T b){return a>b ? a=b, true : false;}

template<class T> inline bool chmax(T& a, T b){return a<b ? a=b, true : false;}

typedef long long ll;

typedef pair<int, int> pii;

typedef pair<ll,ll> pll;



int N,M;

vector<int> v[200005];

int  ok[200005];



void dfs(int p, int n){

    ok[p] = 1;

    if(n == 2){

        return ;

    }





    for(auto &&c : v[p]){

        if(ok[c] == 0){

            dfs(c, n+1);

        }

    }

}



int main(void)

{

    cin >> N >> M;

    REP(i, M){

        int a,b;

        cin >> a >> b;

        a--;b--;

        v[a].push_back(b);

        v[b].push_back(a);

    }



    dfs(0,0);

    if(ok[N-1]==1)pr("POSSIBLE");

    else pr("IMPOSSIBLE");

}

// Optimized solution to the same problem (faster):
#include <bits/stdc++.h>

#define PI 3.14159265358979323846

#define MAXINF (1e18L)

#define INF (1e9L)

#define EPS (1e-9)

#define MOD ((ll)(1e9+7))

#define REP(i, n) for(int i=0;i<int(n);++i)

#define REPA(x, v) for(auto&& x:v)

#define Rep(i,sta,n) for(int i=sta;i<n;i++)

#define RREP(i, n) for(int i=int(n)-1;i>=0;--i)

#define ALL(v) v.begin(),v.end()

#define FIND(v,x) (binary_search(ALL(v),(x)))

#define SORT(v) sort(ALL(v))

#define RSORT(v) sort(v.rbegin(),v.rend())

#define DEBUG(x) cerr<<#x<<": "<<x<<endl;

#define DEBUG_VEC(v) cerr<<#v<<":";for(int i=0;i<v.size();i++) cerr<<" "<<v[i]; cerr<<endl

#define Yes(n) cout<<((n)?"Yes":"No")<<endl

#define YES(n) cout<<((n)?"YES":"NO")<<endl

#define pb push_back

#define fi first

#define se second

using namespace std;

template<class A>void pr(A a){cout << (a) << endl;}

template<class A,class B>void pr(A a,B b){cout << a << " "  ;pr(b);}

template<class A,class B,class C>void pr(A a,B b,C c){cout << a << " " ;pr(b,c);}

template<class A,class B,class C,class D>void pr(A a,B b,C c,D d){cout << a << " " ;pr(b,c,d);}

template<class T> void pr_vec(vector<T> &v, char ep=' '){int n=v.size();REP(ni,n){cout<<v[ni];if(ni!=n-1)cout<<ep;}cout<<endl;};

template<class T> inline bool chmin(T& a, T b){return a>b ? a=b, true : false;}

template<class T> inline bool chmax(T& a, T b){return a<b ? a=b, true : false;}

typedef long long ll;

typedef pair<int, int> pii;

typedef pair<ll,ll> pll;



int main(void)

{

    int N,M;

    cin >> N >> M;

    vector<vector<int>> c(N);

    REP(i, M){

        int a,b;

        cin >> a >> b;

        a--;b--;

        c[a].pb(b);

        c[b].pb(a);

    }

    Rep(i, 1, N-1){

        SORT(c[i]);

        if(FIND(c[i],0) && FIND(c[i], N-1)){

            pr("POSSIBLE");

            return 0;

        }

    }

    pr("IMPOSSIBLE");

}

// Fastest known solution for this problem: