#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <sstream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <numeric>
#include <cctype>
#include <tuple>
#include <iterator>
#include <bitset>
#include <random>
#include <assert.h>
#include <unordered_map>
#include <array>
#include <ctime>

#ifdef _MSC_VER
#include <agents.h>
#endif

#define FOR(i, a, b) for(int i = (a); i < (int)(b); ++i)
#define rep(i, n) FOR(i, 0, n)
#define ALL(v) v.begin(), v.end()
#define REV(v) v.rbegin(), v.rend()
#define MEMSET(v, s) memset(v, s, sizeof(v))
#define X first
#define Y second
#define MP make_pair
#define umap unordered_map

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int, int> P;
typedef unsigned int uint;

struct List{
	int val, cnt;
	List *next;
};

List lv[10010];
int cur;
List *head0, *tail2;

pair<List*, List*> split(List* li, int x){
	//if (li == nullptr) return nullptr;
	if (li->cnt <= x) return split(li->next, x - li->cnt);
	List *ret = &lv[cur++];
	ret->val = li->val, ret->cnt = li->cnt - x, ret->next = li->next;
	li->cnt = x, li->next = ret;
	if (tail2 == li) tail2 = ret;
	return MP(li, ret);
}

int count(List *li, int x){
	if (x <= 0) return 0;
	if (li->val == 0) return count(li->next, x - li->cnt);
	if (li->cnt < x) return li->cnt + count(li->next, x - li->cnt);
	return x;
}

void shuffle(int x, int y){
	List *tail0, *head1;
	tie(tail0, head1) = split(head0, x);
	List *tail1, *head2;
	tie(tail1, head2) = split(head1, y - x);

	// h0->t0->h1->t1->h2->t2
	// h2->t2->h1->t1->h0->t0
	tail2->next = head1;
	tail1->next = head0;
	tail0->next = nullptr;
	head0 = head2, tail2 = tail0;
}

int main(){
	int n;
	while (cin >> n, n){
		int m, p, q, r;
		cin >> m >> p >> q >> r;

		MEMSET(lv, 0);
		cur = 0;
		head0 = &lv[cur++];
		head0->cnt = r;
		head0->val = 1;
		head0->next = &lv[cur];
		tail2 = &lv[cur++];
		tail2->cnt = n - r;
		tail2->val = 0;
		tail2->next = nullptr;

		while (m--){
			int x, y;
			cin >> x >> y;
			shuffle(x, y);
		}
		cout << count(head0, q) - count(head0, p-1) << endl;
	}

	return 0;
}