Go: package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

var (
	sc = bufio.NewScanner(os.Stdin)
)

func main() {
	for sc.Scan() {
		if sc.Text() == "0 0" {
			break
		}
		chunks := strings.Split(sc.Text(), " ")
		n, _ := strconv.Atoi(chunks[0])
		r, _ := strconv.Atoi(chunks[1])
		cards := make([]int, n, n)
		for i := 0; i < n; i++ {
			cards[i] = n - i
		}
		for i := 0; i < r; i++ {
			sc.Scan()
			chunks := strings.Split(sc.Text(), " ")
			p, _ := strconv.Atoi(chunks[0])
			c, _ := strconv.Atoi(chunks[1])
			block := make([]int, c, c)
			for j := 0; j < c; j++ {
				block[j] = cards[p+j-1]
			}
			for j := p - 2; j >= 0; j-- {
				cards[j+c] = cards[j]
			}
			for j := 0; j < c; j++ {
				cards[j] = block[j]
			}
		}
		fmt.Println(cards[0])
	}
}

C++: /*Function Template*/
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef pair<ll,ll> pint;
const int MAX = 510000;
const int MOD = 1000000007;
#define rep(i, n) for(ll i = 0; i < (n); i++)
#define Rep(i, n) for(ll i = 1; i < (n); i++)
#define ALL(a)  (a).begin(),(a).end()
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
ll fac[MAX], finv[MAX], inv[MAX];


template<class T> inline bool chmin(T& a, T b) {
    if (a > b) {
        a = b;
        return true;
    }
    return false;
}
template<class T> inline bool chmax(T& a, T b) {
    if (a < b) {
        a = b;
        return true;
    }
    return false;
}
// テーブルを作る前処理
void COMinit() {
    fac[0] = fac[1] = 1;
    finv[0] = finv[1] = 1;
    inv[1] = 1;
    for (ll i = 2; i < MAX; i++){
        fac[i] = fac[i - 1] * i % MOD;
        inv[i] = MOD - inv[MOD%i] * (MOD / i) % MOD;
        finv[i] = finv[i - 1] * inv[i] % MOD;
    }

}
ll Len(ll n) {
  ll s=0;
  while(n!=0) s++, n/=10;
  return s;
}


ll Sint(ll n) {
  ll m=0,s=0,a=n;
  while(a!=0) s++, a/=10;
  for(ll i=s-1;i>=0;i--) m+=n/((ll)pow(10,i))-(n/((ll)pow(10,i+1)))*10;
  return m;
}


ll Svec(vector<ll> v){
  ll n=0;
  for(ll i=0;i<v.size();i++) n+=v[i];
  return n;
}


ll GCD(ll a,ll b) {
  return b ? GCD(b,a%b) : a;
}


ll LCM(ll a,ll b){
  return a/GCD(a,b)*b;
}


ll Factorial(ll n){
  ll m=1;
  while(n>=1) m*=n,n--;
  return m;
}

void runlength(string s,vector<pair<char,ll>> &p){
  ll x=1;
  if(s.size()==1){
    p.push_back(pair<char,ll>(s[0],1));
  }
  for(ll i=0;i<s.size()-1;i++){
    if(s[i]==s[i+1]){
      x++;
      if(i==s.size()-2){
        p.push_back(pair<char,ll>(s[i],x));
      }
    }else{
      p.push_back(pair<char,ll>(s[i],x));
      x=1;
      if(i==s.size()-2){
        p.push_back(pair<char,ll>(s[s.size()-1],x));
      }
    }
  }
}




ll COM(ll n,ll k){
    if (n < k) return 0;
    if (n < 0 || k < 0) return 0;
    return fac[n] * (finv[k] * finv[n - k] % MOD) % MOD;
}

const int MAX_N=100010;
vector<bool> sieve_of_eratosthenes(){
  vector<bool> isPrime(MAX_N+1,true);
  for(int i=2;i<=MAX_N;i++){
    if(isPrime[i]){
      for(int j=2*i;j<=MAX_N;j+=i){
        isPrime[j]=false;
      }
    }
  }
  return isPrime;
}

vector<pint> prime_factorize(ll n){
  vector<pint> ans;
  for(ll p=2;p<=sqrt(n);p++){
    if(n%p!=0) continue;
    ll cnt=0;
    while(n%p==0){
      n/=p;
      cnt++;
    }
    ans.push_back(make_pair(p,cnt));
  }
  if(n!=1) ans.push_back(make_pair(n,1));
  return ans;
}

/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
int main() {
  IOS;
  while(true){
    ll n,r;cin>>n>>r;
    if(n==0 && r==0) break;
    vector<vector<ll>> v(r+1);
    rep(i,n) v[0].push_back(n-i);
    rep(i,r){
      ll p,c;cin>>p>>c;p--;
      rep(j,c){
        v[i+1].push_back(v[i][p+j]);
      }
      rep(j,n){
        if(p<=j && j<p+c) continue;
        v[i+1].push_back(v[i][j]);
      }
    }
    cout<<v[r][0]<<endl;
  }
}

C++: #include<iostream>
#include<climits>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<functional>
#include<stack>
#include<list>
#include<string>
using namespace std;
#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define REP(i,n) for(int i=0;i<(n);i++)
#define INF INT_MAX/3
#define ALL(a) (a).begin(),(a).end()
#define PII pair<int,int>
#define PCC pair<char,char>
#define PCI pair<char,int>
#define PIC pair<int,char>
#define MP make_pair
#define DEBUG(x) cout<<#x<<": "<<x<<endl

int main()
{
	while (1)
	{
		vector<int> N;
		int n, r;
		cin >> n >> r;
		for(int i=1;i<=n;i++)N.push_back(i);
		if (n == 0)break;
		REP(i, r)
		{
			int p, c;
			cin >> p >> c;
			for(int l=c;l>0;l--)
			{
				int k = n - p -c+1 ;
				int temp = *(N.begin() + k);
				N.push_back(temp);
				N.erase(N.begin() + k);
			}
		}
		cout << N[n-1] << endl;
	}
	return 0;
}

C++: #include <iostream>
#include <cstdio>
#include <stack>
#include <queue>

using namespace std;

int main(void) {
	while(1) {
		int n, r;
		int p, c;
		stack<int> deck, deck_p, deck_c;

		scanf("%d %d", &n, &r);
		if(n == 0 && r == 0) break;
		for(int i = 1; i <= n; i++) {
			deck.push(i);
		}
		for(int i = 0; i < r; i++) {
			scanf("%d %d", &p, &c);
			for(int j = 0; j < p - 1; j++) {
				deck_p.push(deck.top());
				deck.pop();
			}
			for(int j = 0; j < c; j++) {
				deck_c.push(deck.top());
				deck.pop();
			}
			for(int j = 0; j < p - 1; j++) {
				deck.push(deck_p.top());
				deck_p.pop();
			}
			for(int j = 0; j < c; j++) {
				deck.push(deck_c.top());
				deck_c.pop();
			}
		}

		printf("%d\n", deck.top());
	}
	return 0;
}

C++: #include <bits/stdc++.h>
using namespace std;
using lint = long long;
template<class T = int> using V = vector<T>;
template<class T = int> using VV = V< V<T> >;

int main() {
  cin.tie(nullptr); ios::sync_with_stdio(false);
  while (true) {
    int n, r; cin >> n >> r;
    if (!n) break;
    V<> a(n);
    iota(begin(a), end(a), 0);
    while (r--) {
      int p, c; cin >> p >> c, --p;
      rotate(begin(a), begin(a) + p, begin(a) + p + c);
    }
    cout << n - a[0] << '\n';
  }
}

C++: #include<iostream>
using namespace std;

int main(){
	
	int n,r;
	while(cin>>n>>r){
		if(n!=r!=0){
		int h[50]={0},m[50]={0};
		int p,d;
		for(int i=0;i<n;i++)
			h[i]=n-i;
		while(r>0){
			cin>>p>>d;
			int j=d-1;
			for(int i=p+d-1;i>=p;i--)
				m[j--]=h[i-1];
			for(int i=p-1;i>0;i--)
				h[i+d-1]=h[i-1];
			for(int i=d;i>0;i--)
				h[i-1]=m[i-1];
			r--;
	}
			cout<<h[0]<<endl;
	}
	else
		break;
	}
	
}

C++: #include <iostream>
#include <algorithm>

using namespace std;
int n, r, p, c;

int main(){
	while (cin >> n >> r && n){
		int a[55];
		for (int i = 0; i < r; i++){
			a[i] = i + 1;
		}
		for (int j = 0; j < r; j++){
			cin >> p >> c;
			rotate(a + n - p - c + 1, a + n - p + 1, a + n);
		}
		cout << a[n - 1] << endl;
	}
	return 0;
}

C++: 
#include <iostream>
using namespace std;

int main() {

	int n, r, p, c;
	int h[50];
	int change[50];

		while (1) {
			cin >> n >> r;
			if (n == 0)
				break;
			for (int i = 0; i < n; i++) {
				h[i] = n - i;
			}
			for (int i = 0; i < r; i++) {
				cin >> p >> c;
				for (int j = 0; j < p; j++) {
					change[j] = h[j];
				}
				for (int j = 0; j < c; j++) {
					h[j] = h[j + p - 1];
				}
				int k = 0;
				for (int j = c; j < c + p - 1; j++) {
					h[j] = change[k];
					k++;
				}
			}
			cout << h[0] << endl;
		}


	return 0;
}

C++: #include<stdio.h>
int w[60], R, n, p, c, tw[60];
int main(){
    int i;
    while(1){
        scanf("%d%d",&n,&R);
        if(!n)break;
        for(i=1;i<=n;i++)w[i]=n-i+1;
        while(R--){
            scanf("%d%d",&p,&c);
            for(i=1;i<=n;i++)tw[i] = w[i];
            for(i=1;i<=c;i++)w[i]=tw[i+c];
            for(i=1;i<=c;i++)w[i]=tw[i+p-1];
            for(i=c+1;i<p+c;i++)w[i]=tw[i-c];
            for(i=p+c;i<=n;i++)w[i]=tw[i];
        }
        printf("%d\n",w[1]);
    }
}