#include<vector>
#include<map>
#include<set>
#include<algorithm>
#include<functional>
#include<numeric>
#include<utility>
#include<sstream>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cctype>
#include<string>
#include<cstring>
#include<list>
using namespace std;
typedef vector<int>VI;
typedef vector<VI>VVI;
typedef vector<string>VS;
typedef pair<int,int>PII;
typedef long long LL;
#define ALL(a) (a).begin(),(a).end()
#define RALL(a) (a).rbegin(),(a).rend()
#define PB push_back
#define EACH(i,c) for(typeof((c).begin())i=(c).begin();i!=(c).end();i++)
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n) FOR(i,0,n)

struct data{
    int l,r;
    data(int a,int b):l(a),r(b){}
    data(){}
};

int N,M;
int p,q,r;
int x[5001],y[5001];

int solve(){
    vector<data>L;
    L.push_back(data(1,N));
    x[M]=p-1,y[M]=q;
    REP(i,M+1){
        vector<data>a,b,c;
        int sum=0;
        int pos;
        for(int j=0;j<L.size();j++){
            data d=L[j];
            if(x[i]==0)break;
            if(sum+(d.r-d.l+1)<=x[i]){
                a.push_back(d);
                sum+=(d.r-d.l+1);
                pos=j+1;
                if(sum==x[i])break;
            }
            else{
                a.push_back(data(d.l,x[i]+d.l-1-sum));
                //cout<<"**** "<<d.l<<" "<<x[i]+d.l-1-sum<<endl<<endl;
                L[j]=data(x[i]+d.l-sum,d.r);
                pos=j;
                break;
            }
        }
        sum=x[i];
        for(int j=pos;j<L.size();j++){
            data d=L[j];
            if(x[i]==y[i])break;
            if(sum+(d.r-d.l+1)<=y[i]){
                b.push_back(d);
                sum+=(d.r-d.l+1);
                pos=j+1;
                if(sum==y[i])break;
            }
            else{
                b.push_back(data(d.l,y[i]+d.l-1-sum));
                L[j]=data(y[i]-sum+d.l,d.r);
                pos=j;
                break;
            }
        }
        L.erase(L.begin(),L.begin()+pos);
        if(i==M){
            L=b;
            break;
        }
        L.insert(L.end(),b.begin(),b.end());
        L.insert(L.end(),a.begin(),a.end());
        //cout<<endl;EACH(it,L)cout<<it->l<<" "<<it->r<<endl;
    }
    //cout<<endl;EACH(it,L)cout<<it->l<<" "<<it->r<<endl;
    int cnt=0;
    EACH(it,L){
        int l=it->l,u=it->r;
        if(l>r)continue;
        if(u<=r)cnt+=u-l+1;
        else{
            cnt+=r-l+1;
        }
    }
    return cnt;
}







int main(){
    while(cin>>N,N){
        cin>>M;
        cin>>p>>q>>r;
        REP(i,M)cin>>x[i]>>y[i];
        cout<<solve()<<endl;
    }
    return 0;
}