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++: #include <bits/stdc++.h>
using namespace std;

#define first  fs
#define second se
#define all(v) v.begin(), v.end()
#define rep(i, n) for (int i = 0; i < n; ++i)

using pii = pair<int, int>;
using vi = vector<int>;
using lint = long long;

const int inf = 1001001001;
const lint linf = 1001001001001001001ll;
const int mod = 1e9 + 7;
const int dx[]{0, 1, 0, -1, -1, -1, 1, 1}, dy[]{1, 0, -1, 0, -1, 1, -1, 1};

template<typename T> inline bool chmin(T &a, T b) { if (a > b) { a = b; } return a > b; }
template<typename T> inline bool chmax(T &a, T b) { if (a < b) { a = b; } return a < b; }
template<typename T> inline void print(const T &x, char s = '\n') { cout << x << s; }
template<typename T> inline void print(const vector<T> &v, string s = " ") 
{ rep(i, v.size()) cout << v[i] << (i + 1 == v.size() ? "\n" : s); }
inline bool inside(int y, int x, int H, int W) { return 0 <= y && y < H && 0 <= x && x < W; }
inline lint in() { lint x; std::cin>>x; return x; }

int main() {
	int n, r;
	while (cin >> n >> r, n) {
		vi v;
		rep(i, n) v.push_back(n - i);

		rep(_, r) {
			int p = in(), c = in();
			vi beet, ei;
			for (int i = p - 1; i < p + c - 1; ++i) beet.push_back(v[i]);
			rep(i, p - 1) beet.push_back(v[i]);

			rep(i, p + c) v[i] = beet[i];
		}

		print(v[0]);
	}
}

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

//define
#define ALL(a) a.begin(),a.end()
#define REP(i,n) for(int i=0;i<n;i++)
#define RREP(i,n) for(int i=n-1;i>=0;i--)
#define debug(x) if(1)cout<<#x<<":"<<x<<endl;
#define DEBUG(x) if(1)cout<<#x<<":"<<x<<endl;
#define ll long long

//constant
const int MOD = 1000000009;
const int INF = INT_MAX / 3;

//typedef
typedef vector<int> vi;
typedef vector<vector<int>> vvi;

int main() {
	int n, r;
	while (cin >> n >> r, n) {
		vi st(n);
		REP(i, n)
			st[i] = n-i ;

		REP(i, r) {
			vi sw(n);
			REP(i, n)
				sw[i] = st[i];
			int p, c;
			cin >> p >> c;
			REP(j, c)
				sw[j] = st[p-1  + j];
			REP(j, p-1)
				sw[j + c] = st[j];


			REP(i, n)
				st[i] = sw[i];

		}

		cout << st[0] << endl;
	}

	return 0;
}

C++: #include<bits/stdc++.h>
using namespace std;
int x[100];
int y[100];
int card [100];
int ans[100];
int n,r,counter;
bool input(){
	for(int i=0;i<100;i++){
	x[i]=0;
	y[i]=0;
	}
	cin >>n>>r;
	for(int i=0;i<r;i++){
	cin>>x[i]>>y[i];
	}
	if(n==0){
	return false;
	}
	else{
	 return true;
	}
}
void solve(){
	for(int i=0;i<100;i++){
		card[i]=i+1;
	}
	for(int i=0;i<r;i++){
		for(int k=0;k<y[i];k++){
			int a=card[x[i]+y[i]-2];
			for(int j=x[i]+y[i]-1;j>0;j--){
				card[j]=card[j-1];
			}
			card[0]=a;
		}
	}
	ans[counter]=n-card[0]+1;
	counter++;
}



int main (){
	counter=0;
	while(input()){
	solve();
	}
for(int i=0;i<counter;i++){
cout<<ans[i]<<endl;
}
return 0;
}

C++: #include <bits/stdc++.h>

#define rep(i, n) for(int i = 0; i < n; i++)

typedef long long ll;
using namespace std;
int mod = 1000000007;

int main(void){
    while(true){
        int N, R; cin >> N >> R;
        if(N == 0 && R == 0) break;
        vector<int> A(N);
        rep(i, N) A[i] = N-i;
        rep(i, R){
            int start, num;
            cin >> start >> num; start--;

            vector<int> B(num);
            rep(j, num) B[j] = A[start+j];

            for(int j = start+num-1; j >= num; j--) A[j] = A[j-num];

            for(int j = 0; j < num; j++) A[j] = B[j];
        }
        cout << A[0] << endl;
    }
    return 0;
}

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

int main(){
    int N, R;
    while(scanf("%d %d", &N, &R), N || R){
        int cards[51], _a[51];
        for(int i=1;i<=N;i++){
            cards[i] = N-i+1;
        }

        while(R--){
            int p, c;
            scanf("%d %d", &p, &c);
            
            for(int i=1;i<p;i++){
                _a[i] = cards[i];
            }
            for(int i=1;i<=c;i++){
                cards[i] = cards[p+i-1];
            }
            for(int i=1;i<p;i++){
                cards[c+i] = _a[i];
            }
        }

        printf("%d\n", cards[1]);
    }

    
}

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


int main(){
	int n,r;
	while(cin>>n>>r,n){
		string s="";
		for(int i=n;i>=1;i--){
			char c=50+i;
			s+=c;
		}
		for(int i=0;i<r;i++){
			int p,c;
			cin>>p>>c;
			string a=s.substr(0,p-1);
			s.erase(0,p-1);
			string b=s.substr(0,c);
			s.erase(0,c);
			s=b+a+s;
			
		}
		cout<<(int)s[0]-50<<endl;
	}
	return 0;
}

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

int main() {
  // 入れ変えるカードを一度他のvectorに入れておくやり方
  int n,r;
  while(cin >> n >> r) {
    if(n == 0 && r == 0) break;
    // カードの山の生成
    vector<int> v;
    for(int i = 0; i < n; i++) v.insert(v.begin()+0,i+1);
    // for(int k = 0; k < v.size(); k++) {
    // cout << v.at(k) << " ";
    // }
    // cout << endl;

    for(int i = 0; i < r; i++) {
      int p,c;
      cin >> p >> c;

      // // 先に後ろに移動するはずのカードを追加
      // for(int j = 0; j < c; j++) v.insert(v.begin()+j,v[p+j-1]);
      //
      // // 移動したカードを削除
      // for(int j = 0; j < c; j++) v.erase(v.begin() + ((c+p-1)+j));
      vector<int> tmp;
      // 移動するカードをtmpに追加
      for(int j = 0; j < c; j++) tmp.push_back(v[p+j-1]);
      // for(int k = 0; k < tmp.size(); k++) {
      // cout << tmp.at(k) << " ";
      // }
      // cout << endl;

      // 移動するカードを削除
      for(int j = 0; j < c; j++) v.erase(v.begin() + (p-1));
      // cout << "移動カード削除：";
      // for(int k = 0; k < v.size(); k++) {
      // cout << v.at(k) << " ";
      // }
      // cout << endl;

      // vにtmpを追加
      int tmp_size = tmp.size();
      //  tmp.insert(tmp.end(),v.begin(),v.end());
      for(int j = 0; j < tmp_size; j++) {
        v.insert(v.begin()+0,tmp.back());
        tmp.pop_back();
      }
      // cout << "tmp追加：　";
      // for(int k = 0; k < v.size(); k++) cout << v.at(k) << " ";
      // cout << endl;
      // vector<int> v = tmp;
      //for(int j = 0; j < tmp.size(); j++) v.insert(v.begin()+0 )
    }
    cout << v.front() << endl; 
    //   for(int k = 0; k < v.size(); k++) {
    //   cout << v.at(k) << endl;
    // }
    // 初期化
    //  vector<int> v;
  }
  // for(int i = 0; i < v.size(); i++) {
  // cout << v.at(i) << endl;
  //}
}

C++: #include <stdio.h>

int main(){
    int n,r,i,j,p,c,a[51],b[51];
    while(1){
        scanf("%d %d",&n,&r);
        if (n==0&&r==0) break;
        for (i=1;i<=n;i++) {
            a[i]=i; //a[i]????????????i??????????????????????????????????????????
        }
        for (i=0;i<r;i++) {
            scanf("%d %d",&p,&c);
            for (j=1;j<=c;j++) {
                b[j]=a[j];
                a[j]=a[j+p-1];
            }
            if (p-1>c) {
                for (j=c+1;j<p;j++) {
                    b[j]=a[j];
                }
            }
            for (j=1;j<p;j++) {
                a[j+c]=b[j];
            }
        }
        
    }
    return 0;
}

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

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

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

  return 0;
}