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>
using namespace std;
int n, r;
int p, c;
int a[100], tmp[100];

int main(void) {
    while(1) {
        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=p-1; j<p-1+c; j++) {
                tmp[j-p+1] = a[j];
            }
            for(int j=c; j<n; j++) {
                if(j-c >= p) {
                    tmp[j] = a[j-c+1];
                } else {
                    tmp[j] = a[j-c];
                }
            }
            for(int j=0; j<n; j++)
                a[j] = tmp[j];
        }
        cout << a[0] << endl;       
    }
    return 0;
}

C++: #include<stdio.h>
int main(void){
	int p, c, count, n, r, huda[200] = {0}, i, j;
	while (1) {
		scanf("%d %d", &n, &r);
		for (i = 0;i < n;i++) {
			huda[i] = i + 1;
		}
		if (n == 0 && r == 0) {
			break;
		}
		for (i = 0;i < r;i++) {
			scanf("%d %d", &p, &c);

			for (j = 0;j < c;j++) {
				huda[n + j] = huda[n - p-j];
				huda[n - p-j] = -1;
			}

			count = 0;
			for (j = 0;j < n;j++) {

				if (count > n)
					break;
				huda[j] = huda[count];
				if (huda[count] == -1) {
					j--;
				}
				count++;

			}
		/*	for (j = 0;j < n;j++) {
				printf("%d ", huda[j]);
			}*/
		}
		printf("%d\n",huda[n-1]);
	}


	return 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;
  //}
}