Go: package main

import "fmt"

func main() {
	var n, r int
	fmt.Scan(&n, &r)
	for n != 0 || r != 0 {
		arr := make([]int, n)
		for i := range arr {
			arr[i] = len(arr) - i
		}

		for i := 0; i < r; i++ {
			var p, c int
			fmt.Scan(&p, &c)
			mid, top, last := arr[:p-1], arr[p-1:p-1+c], arr[p-1+c:]
			arr = append(append(append([]int{}, top...), mid...), last...)
		}
		fmt.Println(arr[0])
		fmt.Scan(&n, &r)
	}
}

C++: #include <iostream>
#include <cmath>
#include <utility>
#include <functional>
#include <math.h>
#include <algorithm>
#include <iomanip>
#include <vector>
#include <string>
#include <set>
#include <map>
#include <tuple>
#include <stdlib.h>
#include <deque>
using namespace std;
#define rep(i,n,x) for(int i=n;i<x;i++)
#define rem(i,n,x) for(int i=n;i>x;i--)
#define SORT(x) sort(x.begin(),x.end())
#define REV(x) reverse(x.begin(),x.end())
#define all(x) x.begin(),x.end()
#define pb push_back
#define mp make_pair
#define setp(x) setprecision(x)
using LL = long long;
using ULL = unsigned long long;

int main() {
	int n, r;
	cin >> n >> r;

	while (n != 0) {
		// カードの山を作成
		deque<int> card(n);
		rep(i, 0, n) card.push_front(i + 1);
		// シャッフル
		pair<deque<int>, deque<int>> pa;
		rep(i, 0, r) {
			int p, c;
			cin >> p >> c;
			// cardの上からp-1枚をとってpa.firstに入れる
			rep(i, 0, p - 1) {
				pa.first.pb(card.front());
				card.pop_front();
			}
			// cardの上からc枚をとってpa.secondに入れる
			rep(i, 0, c) {
				pa.second.pb(card.front());
				card.pop_front();
			}
			// pa.firstの末尾をcardの先頭に入れる
			while(!pa.first.empty()) {
				card.push_front(pa.first.back());
				pa.first.pop_back();
			}
			// pa.secondの末尾をcardの先頭に入れる
			while(!pa.second.empty()){
				card.push_front(pa.second.back());
				pa.second.pop_back();
			}
		}

		cout << card.front() << endl;

		cin >> n >> r;
	}

	return 0;
}

C++: //rotateも何も知らず、また頂いたPDFもまともに読まないまま知っている知識のみで解いた結果です。
//少なくとも提出してAcceptは出ています。
//「きれいなプログラム」がどんなものかまだ把握できていないため、この点に関してもご指摘等頂ければと思います。
//千田 直輝

#include<iostream>

#define R input[0][1]

using namespace std;

int getTop() {
	int input[51][2];

	/*入力*/
	cin >> input[0][0] >> input[0][1];								//まずnとrを受け取る。
	if (input[0][0] == 0 && input[0][1] == 0) {						//n=r=0なら0を返して関数終了。
		return 0;
	}
	for (char pos = 1; pos <= input[0][1]; pos++) {					//シャッフルの仕方をr回分入力
		cin >> input[pos][0] >> input[pos][1];
	}

	/*シャッフルもどし*/
	int whtop = 1;													//最後一番上にいるカードは、今何番目にいる？
	if (R==0)return input[0][0];									//一回もシャッフルしないならコレ
	while (input[0][1] != 0) {	
		if (whtop <= input[R][1]) whtop = whtop + input[R][0] - 1;
		else if ((input[R][0] + input[R][1] - 1) < whtop) whtop = whtop;
		else whtop = whtop - input[R][1];
		R--;
	}
	return input[0][0] - whtop + 1;

}


int main()
{
	while (1) {
		int check;
		check = getTop();
		if (check == 0)break;
		else cout << check << endl;
	}
}

C++: #include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<cstdio>
using namespace std;
int main(){
  int maisu[50];
  int katto;
  int swap[50];
  int p,c;
  int i,j=0;
  int test;
  for(i=0; i<50; i++){
    maisu[i] = i;
  }
  cout << maisu[0] << endl;
  cin >> katto;
  // while(j <= katto){
    while(true){
      scanf("%d%d",&p,&c);
      if(p == 0 && c == 0){break;}
      for(i=0; i<c; i++){
	swap[i] = maisu[i + p-1];
      }
      for(i = 0; i<p-1; i++){
	swap[i+c] = maisu[i];
      }
      for(i=0;i<p+c-1; i++){
	maisu[i] = swap[i];
      }
    }
    // if(p == 0 && c == 0){
	// break;
    }
  // }
    cout << maisu[0] << endl;
    return 0;
}

C++: using namespace std;

int main(){
    int n,r,p,c,a[50];

    while(cin >> n >> r,n||r){
        for(int i=0;i<n;i++){
            a[i] = n-i;
        }

        for(int i=0;i<r;i++){
            cin >> p >> c;
            rotate(a,a+p-1,a+p+c-1);
        }
    cout << a[0] << endl;
    }

    return 0;

}

C++: #include <bits/stdc++.h>
using namespace std;

int main(void){
  vector<int> f;
  while(1){
    f.clear();
    int n, r, p, c;
    cin >> n >> r;
    if(n == 0 && r == 0) return 0;
    for(int i=n; i > 0; i--){
      f.push_back(i);
    }


    vector<int> t;
    for(int i=0; i < r; i++){
      cin >> p >> c;
      t.clear();
      for(int j=p-1; j < p+c-1; j++){
        t.push_back(f.at(j));
      }
      for(int j=p-1; j > 0; j--){
        f.at(j+c-1) = f.at(j-1);
      }
      for(int j=0; j < c; j++){
        f.at(j) = t.at(j);
      }


    }
    cout << f.front() << endl;
  }
}

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

int main(){
    int n,r,p,c;
    vector<int> cards;

    while(cin >> n >> r, n&&r){
        cards.clear();
        for(int i = 0; i < n; i++){
            cards.push_back(n - i);
        }
        while(r--){
            cin >> p >> c;
            vector<int> cpCards = cards;
            int pos = 0;
            for(int i = p - 1; i < p - 1 + c; i++){
                cards[pos] = cpCards[i];
                pos++;
            }
            for(int i = 0; i < p - 1; i++){
                cards[pos] = cpCards[i];
                pos++;
            }
        }
        cout << cards.front() << endl;
    } 
}

C++: #include<bits/stdc++.h>
using namespace std;
#define MOD 1000000007
#define INF 1000000010
#define EPS 1e-9
#define fst first
#define scd second

#define debug(x) cout<<x<<endl;
#define repi(i,x,n) for(int i=x;i<n;i++)
#define rep(i,n) repi(i,0,n)
#define lp(i,n) repi(i,0,n)
#define repn(i,n) for(int i=n;i>=0;i--)
#define int long long
#define endl "\n"


signed main(){
  cin.tie(0);	
  ios::sync_with_stdio(false);
  while(1){
    int n,r;
    cin>>n>>r;
    if(n==0) break;
    int p,c;
    int a[n];
    for(int i=n-1;i>=0;i--){
      a[i]=n-i;
    }
    for(int i=0;i<r;i++){
      cin>>p>>c;
      rotate(a,a+p-1,a+p+c-1);
    }
    cout<<a[0]<<endl;
  }
    

  return 0;
}

C++: #include <iostream>

using namespace std;

int main(){
	int n,r,p,c;
	int huda[51],hoge[51];

	while(1){

		//n:RDÌ  r:DðØéñ
		cin >> n >> r;
		if(n==0 && r==0)break;//0 0¾Á½çI¹

		//RDª5Èçã©çÉ54321ÆÈéæ¤É·é
		for(int i=0 ; i<n ; i++){
			huda[i] = n-i;
			hoge[i] = huda[i];
		}
		
		//rñ¾¯RDðVbt·é
		for(int i=0 ; i<r ; i++){
			//ã©çpÚÌD©çc²«æèRDÌêÔãÉÁÄ­é
			cin >> p >> c;
			p--;

			//ã©çpÚ©çp+cÚÜÅðêÔãÉÁÄ­éìðs¤
			for(int j=0 ; j<c ; j++){
				hoge[j] = hoge[p+j];
			}
			//cèÌDðºÉÁ¦é
			for(int j=0 ; j<p ; j++){
				hoge[c+j] = huda[j];
			}
			
			//ÅãÉhogeðhudaÉRs[·é
			for(int j=0 ; j<51 ; j++){
				huda[j] = hoge[j];
			}
		}

		//¦ÌoÍ
		cout << huda[0] << endl;
	}

	return 0;
}

C++: #include<iostream>
using namespace std;
int main(){
  int a[51]={};
  int st[51]={};
  int n,r;
  int p,c;
  while(1){
    //in
    cin >> n >> r;
    if(n==0&&r==0)break;
    for(int i=0;i<n;i++){
      a[i]=n-i;
    }
    for(int i=0;i<r;i++){
      cin >> p >>c; 
      for(int j=0;j<n;j++){
	st[j]=a[j];
      }
      for(int j=0;j<c+1;j++){
	a[j]=st[p+j-1];
      }
      for(int j=0;j<p;j++){
	a[j+c]=st[j];
      }
    }
    cout << a[0] << endl;
  }
  return 0;
}

C++: #include <cstdio>

using namespace std;

int main()
{
	int n, r;
	int c[50], d[50];
	
	while (scanf("%d %d", &n, &r) && n){
		for (int i = 0; i < n; i++) c[i] = n - i;
		
		for (int i = 0; i < r; i++){
			int p, dx;
			scanf("%d %d", &p, &dx);
			for (int j = 0; j < n; j++) d[j] = c[j];
			for (int j = 0; j < p - 1; j++) d[j + dx] = c[j];
			for (int j = 0; j < dx; j++) d[j] = c[j + p - 1];
			for (int j = 0; j < n; j++) c[j] = d[j];
		}
		
		printf("%d\n", c[0]);
	}
}

C++: #import<cstdio>
#import<vector>
#import<algorithm>
main(){for(int i,r,n,p,c;scanf("%d%d",&n,&r),n;){std::vector<int> v;for(i=n;i;i--)v.push_back(i);for(i=0;i<r;i++)scanf("%d%d",&p,&c),p--,std::rotate(v.begin(),v.begin()+p,v.begin()+p+c);printf("%d\n",v[0]);}}