#include<bits/stdc++.h>
#define pb push_back
#define eb emplace_back
#define int long long
#define F(i,x,y) for(int i=x;i<=y;++i)
#define G(i,x,y) for(int i=x;i>=y;--i)
#define FD(i,x,y) for(int i=x;i*i<=y;++i)
#define GD(i,x,y) for(int i=x;i*i>=y;--i)
#define adde(x,y) z[x].eb(y);
#define Adde(x,y) z[x].eb(y),z[y].eb(x);
#define addew(x,y,w) z[x].eb(y,w)
#define Addew(x,y,w) z[x].eb(y,w),z[y].eb(x,w)
#define FIMX(X) memset(X,0x3f,sizeof X)
#define FIMI(X) memset(X,-0x3f,sizeof X)
#define FI0(X) memset(X,0,sizeof X)
#define FIN(X) memset(X,-1,sizeof X)
#define rng(X) X.begin(),X.end()
#define PII pair<int,int>
#define PDD pair<double,double>
#define PIII tuple<int,int,int>
#define VI vector<int>
#define VII vector<PII>
#define VID vector<pair<int,double>>
#define VDD vector<PDD>
using namespace std;
const int N=2000010;
int f[N][22];
struct qwq{int l,r;}z[N];
void solve(unsigned __testid=1){
int n,k;
while(cin>>n>>k){
F(i,1,k){
cin>>z[i].l>>z[i].r;
if(z[i].l>z[i].r)z[i].r+=n;
}
sort(z+1,z+k+1,[&](auto l,auto r){
return l.l<r.l||l.l==r.l&&l.r>r.r;
});
int p=1,mx=0;
F(i,1,2*n){
while(p<=k&&z[p].l<=i)mx=max(mx,z[p++].r+1);
f[i][0]=mx;
}
F(j,1,21)
F(i,1,2*n)
f[i][j]=f[f[i][j-1]][j-1];
int mi=1e18;
F(i,1,2*n){
int cnt=0,now=i;
G(j,21,0)
if(n+i>f[now][j])
cnt+=(1ll<<j),now=f[now][j];
now=f[now][0],++cnt;
if(i+n<=now)mi=min(mi,cnt);
}
if(mi>=1e17)
cout<<"impossible\n";
else
cout<<mi<<'\n';
}
}
int32_t main(){
int T;
T=1;
F(_,1,T)
solve(_);
return 0;
}