#include<iostream>
#include<string>
#include<cmath>
#include<queue>
#include<map>
#include<set>
#include<list>
#include<iomanip>
#include<vector>
#include<functional>
#include<algorithm>
#include<cstdio>
#include<unordered_map>
using namespace std;
//---------------------------------------------------
//????????????????????????????????????
#define int long long
#define str string
#define rep(i,j) for(int i=0;i<(int)(j);i++)
typedef long long ll;
typedef long double ld;
const ll inf = 4523372036854775807;
const int inf2 = 1145141919;
const ld pi = 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899;
struct P {
	ll pos, cost;
};
bool operator<(P a, P b) { return a.cost < b.cost; }
bool operator>(P a, P b) { return a.cost > b.cost; }
struct B {//??£??\???????????¨???
	ll to, cost;
};
struct S {//???????????±?????\???????????°
	int from, to, cost;
};
bool operator<(S a, S b) { return a.cost < b.cost; }
bool operator>(S a, S b) { return a.cost > b.cost; }
struct H {
	int x, y;
};
ll gcm(ll i, ll j) {//?????§??¬?´???°
	if (i > j) swap(i, j);
	if (i == 0) return j;
	return gcm(j%i, i);
}
ld rad(ld a, ld b, ld c, ld d) {
	return sqrt(pow(a - c, 2) + pow(b - d, 2));
}//rad?????§?¨???????2??????????????¢
 //---------------------------------------------------
 //+++++++++++++++++++++++++++++++++++++++++++++++++++
struct A {
	int s, e, s2, size;
	//????????????????????????????????????????????????????????????????????????
};
int n, m, p, q, r;
vector<A>a[2];
vector<int>b[2];
signed main() {
	while (cin >> n&&n!=0) {
		cin >> m >> p >> q >> r;
		int d = 0, e = 1, k, t, x, y;
		a[0].clear(); a[1].clear();
		b[0].clear(); b[1].clear();
		a[d].push_back(A{ 1,n,1,n });
		b[d].push_back(1);
		for (int z = 0; z < m; z++) {
			a[e].clear(); b[e].clear();
			cin >> x >> y;
			//y+1??????????????????????????§????????????????????????????????????
			k = lower_bound(b[d].begin(), b[d].end(), y + 1) - b[d].begin();
			if (k == b[d].size() || a[d][k].s2 > y + 1)
				k--;
			b[e].push_back(1);
			a[e].push_back(A{ a[d][k].s + (y + 1 - a[d][k].s2),a[d][k].e,1,a[d][k].size - (y + 1 - a[d][k].s2) });
			int sum = a[d][k].size - (y + 1 - a[d][k].s2) + 1;
			k++;
			for (; k < a[d].size(); k++) {
				b[e].push_back(sum);
				a[e].push_back(A{ a[d][k].s,a[d][k].e,sum,a[d][k].size });
				sum += a[d][k].size;
			}
			//x+1?????????y?????§???????????????????????????????????????
			k = lower_bound(b[d].begin(), b[d].end(), x + 1) - b[d].begin();
			t = lower_bound(b[d].begin(), b[d].end(), y) - b[d].begin();
			if (k == a[d].size() || a[d][k].s2 > x + 1)
				k--;
			if (t == a[d].size() || a[d][t].s2 > y)
				t--;
			if (k == t) {
				b[e].push_back(sum);
				a[e].push_back(A{ a[d][k].s + (x + 1 - a[d][k].s2),a[d][k].s + (y - a[d][k].s2),sum,y - x });
				sum += y - x;
			}
			else {
				b[e].push_back(sum);
				a[e].push_back(A{ a[d][k].s + (x + 1 - a[d][k].s2),a[d][k].e,sum,a[d][k].size - (x + 1 - a[d][k].s2) });
				sum += (a[d][k].size - (x + 1 - a[d][k].s2));
				k++;
				for (; k < t; k++) {
					b[e].push_back(sum);
					a[e].push_back(A{ a[d][k].s,a[d][k].e,sum,a[d][k].size });
					sum += a[d][k].size;
				}
				b[e].push_back(sum);
				a[e].push_back(A{ a[d][k].s,a[d][k].s + (y - a[d][k].s2),sum,y - a[d][k].s2 + 1 });
				sum += y - a[d][k].s2 + 1;
			}
			//1??????x?????§????????????????????????????????§?????????
			k = lower_bound(b[d].begin(), b[d].end(), x) - b[d].begin();
			if (k == b[d].size() || a[d][k].s2 > x)
				k--;
			for (int i = 0; i < k; i++) {
				b[e].push_back(sum);
				a[e].push_back(A{ a[d][i].s,a[d][i].e,sum,a[d][i].size });
				sum += a[d][i].size;
			}
			b[e].push_back(sum);
			a[e].push_back(A{ a[d][k].s,a[d][k].s + (x - a[d][k].s2),sum,x - a[d][k].s2 + 1 });
			swap(d, e);
		}
		k = lower_bound(b[d].begin(), b[d].end(), p) - b[d].begin();
		t = lower_bound(b[d].begin(), b[d].end(), q) - b[d].begin();
		if (k == b[d].size() || a[d][k].s2 > p) k--;
		if (t == b[d].size() || a[d][t].s2 > q) t--;
		a[d][k].size -= (p - a[d][k].s2);
		a[d][k].s = a[d][k].s + (p - a[d][k].s2);
		a[d][t].size = (q - a[d][t].s2 + 1);
		a[d][t].e = a[d][t].s + (q - a[d][t].s2);
		int sum = 0;
		if (k == t) {
			if (a[d][k].e <= r)
				sum = a[d][k].size;
			else if (a[d][k].s <= r)
				sum = r - a[d][k].s + 1;
		}
		else {
			for (; k <= t; k++) {
				if (a[d][k].e <= r)
					sum += a[d][k].size;
				else if (a[d][k].s <= r)
					sum += r - a[d][k].s + 1;
			}
		}
		cout << sum << endl;
	}
	getchar(); getchar();
}

Measured memory_bytes: 3440