#include #include #include #include #include #include #include #include #include #include #define mkp make_pair #define mkt make_tuple #define rep(i,n) for(int i = 0; i < (n); ++i) #define all(v) v.begin(),v.end() using namespace std; typedef long long ll; const ll MOD=1e9+7; template void chmin(T &a,const T &b){if(a>b) a=b;} template void chmax(T &a,const T &b){if(a>N>>M>>A>>B; vector L(M),R(M); rep(i,M) cin>>L[i]>>R[i]; rep(i,M){ L[i]--;R[i]--; } A--;B--; vector> g(N+1); rep(i,M){ g[L[i]].push_back(R[i]+1); g[R[i]+1].push_back(L[i]); } queue Q; vector dist(N+1,MOD); for(int i=0;i<=A;i++){ dist[i]=0; Q.push(i); } while(!Q.empty()){ int now=Q.front(); Q.pop(); for(auto nex:g[now]){ if(dist[nex]==MOD){ dist[nex]=dist[now]+1; Q.push(nex); } } } int ans=MOD; for(int i=B+1;i<=N;i++) chmin(ans,dist[i]); if(ans==MOD) cout<<-1<