Go: package main

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

var scanner = bufio.NewScanner(os.Stdin)

func nextString() string {
	scanner.Scan()
	return scanner.Text()
}

func nextInt() (int, error) {
	return strconv.Atoi(nextString())
}

func main() {
	scanner.Split(bufio.ScanWords)

	n, _ := nextInt()
	m, _ := nextInt()

	arr := make([][]int, m)
	for i := range arr {
		a, _ := nextInt()
		b, _ := nextInt()
		arr[i] = []int{a, b}
	}

	sort.Slice(arr, func(i, j int) bool { return arr[i][0] > arr[j][0] })
	//	fmt.Println(arr)

	nGot := 0
	spent := 0
	for i := range arr {
		a := arr[i][0]
		b := arr[i][1]
		if a >= n {
			nGot++
		} else if a+b >= n {
			spent += n - a
			nGot++
		}
		if nGot >= m-1 {
			break
		}
	}
	fmt.Println(spent)
}

C++: //#include <bits/stdc++.h>
 
#include <iostream>
#include <algorithm>
 
#include <bitset>
#include <vector>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <stack>
#include <queue>
#include <deque>
#include <cstring>
#include <string>
#include <utility>
#include <array>
#include <complex>
#include <valarray>
 
#include <cassert>
#include <cmath>
#include <functional>
#include <iomanip>
#include <chrono>
#include <random>
#include <numeric>
 
 
using namespace std;
#define int long long
 
typedef long long ll;
typedef unsigned long long ull;
//typedef unsigned __int128 HASH;
typedef pair<int,int> pii;
typedef pair<ll, ll> pll;
typedef pair<ull, ull> pullull;
typedef pair<ll,int> plli;
typedef pair<double, int> pdbi;
typedef pair<int,pii> pipii;
typedef pair<ll,pll> plpll;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<vi> vvi;
typedef vector<vvi> vvvi;
typedef vector<pii> vpii;
typedef vector<vector<int>> mat;
 
#define rep(i,n) for (int i=0;i<(n);i++)
#define rep2(i,a,b) for (int i=(a);i<(b);i++)
#define rrep(i,n) for (int i=(n);i>0;i--)
#define rrep2(i,a,b) for (int i=(a);i>b;i--)
#define pb push_back
#define fi first
#define se second
#define all(a) (a).begin(),(a).end()
#define rall(a) (a).rbegin(),(a).rend()
 
const ll hmod1 = 999999937;
const ll hmod2 = 1000000000 + 9;
const int INF = 1<<30;
const ll INFLL = 1LL<<62;
const double EPS = 1e-12;
const ll mod = 1000000000 + 7;
const int dx4[4] = {1, 0, -1, 0};
const int dy4[4] = {0, 1, 0, -1};
const int dx8[8] = {1, 1, 1, 0, 0, -1, -1, -1};
const int dy8[8] = {0, 1, -1, 1, -1, 0, 1, -1};
const double pi = 3.141592653589793;
 
#define addm(X, Y) (X) = ((X) + ((Y) % mod) + mod) % mod
#define inside(y, x, h, w) (0 <= (y) && (y) < (h) && 0 <= (x) && (x) < (w)) ? true : false
 
//debug
#define DEBUG 
 
#define DUMPOUT cout
 
#ifdef DEBUG
#define dump(...) DUMPOUT<<#__VA_ARGS__<<" :["<<__FUNCTION__<<":"<<__LINE__<<"]"<<endl; DUMPOUT<<"    "; dump_func(__VA_ARGS__)
#else
#define dump(...) 
#endif
 
void dump_func() {DUMPOUT << endl;};
 
template <class Head, class... Tail> void dump_func(Head&& head, Tail&&... tail) {
    DUMPOUT << head;
    if (sizeof...(Tail) == 0) DUMPOUT << " ";
    else DUMPOUT << ", ";
    dump_func(std::move(tail)...);
}
 
//ostream 
template<typename T> ostream& operator << (ostream& os, vector<T>& vec) {
    os << "["; for (int i = 0; i<vec.size(); i++) os << vec[i] << (i + 1 == vec.size() ? "" : ", "); os << "]";
    return os;
}
 
template<typename T, typename U> ostream& operator << (ostream& os, pair<T, U>& pair_var) {
    os << "(" << pair_var.first << ", " << pair_var.second << ")";
    return os;
}
 
template<typename T, typename U> ostream& operator << (ostream& os, map<T, U>& map_var) {
    os << "[";
    for (auto itr = map_var.begin(); itr != map_var.end(); itr++) {
        os << "(" << itr->first << ", " << itr->second << ")"; itr++;  if(itr != map_var.end()) os << ", "; itr--;
    }
    os << "]";
    return os;
}
 
template<typename T> ostream& operator << (ostream& os, set<T>& set_var) {
    os << "[";
    for (auto itr = set_var.begin(); itr != set_var.end(); itr++) {
        os << *itr; ++itr; if(itr != set_var.end()) os << ", "; itr--;
    }
    os << "]";
    return os;
}

int n, m;
int a[1000 + 5], b[1000 + 5];

signed main() {	
    cin.tie(0);
    ios::sync_with_stdio(false);
    cin >> n >> m;
    rep(i, m) {
        cin >> a[i] >> b[i];
    }
    sort(b, b + n);
    int cnt = 0;
    int ans = 0;
    rep(i, m) {
        if (b[i] <= n) cnt++;
        else {
            ans += b[i] - n;
            cnt++;
        }
        if (cnt >= m - 1) break;
    }
    cout << ans << endl;
    
}

C++: #include <bits/stdc++.h>
using ll = long long;
using namespace std;
#define _overload3(_1, _2, _3, name, ...) name
#define _rep(i, n) repi(i, 0, n)
#define repi(i, a, b) for(int i = int(a); i < int(b); ++i)
#define rep(...) _overload3(__VA_ARGS__, repi, _rep, )(__VA_ARGS__)
const long long INFLL = 1LL << 60;
const int INFINT = 1 << 30;
const long long MOD = 1e9 + 7;

template <class T> void vecout(T V) {
    auto t = V.begin();
    while(t != V.end()) {
        cout << *t++;
        if(t != V.end()) cout << " ";
    }
    cout << endl;
};

int main() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    int n, m, a, t = 0, mi, x, c = 0;
    cin >> n >> m;
    mi = 2 * n;
    rep(i, m) {
        cin >> a >> x;
        mi = min(mi, a);
        if(a < n) {
            t += n - a;
            c++;
        }
    }
    if(c > 0) t -= n - mi;
    cout << t << endl;
}

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

int main(){

  int n,m,c=0,r=0;
  int a[1000],b[1000];

  cin >> n >> m;

  for(int i=0; i<m; ++i){
    cin >>a[i]>>b[i];
    if(a[i]>=b[i]) ++c;
  }

  if(c<m-1){
    for(int i=0;i<m-1;++i){
      for(int k=i+1;k<m;++k)
	if(a[i]<a[k]){
	  swap(a[i],a[k]);
	}
    }

    for(int i=0;i<m;++i){
      if(n>a[i]){
	r+=n-a[i];
	++c;
	if(c>=m-1) break;
      }
    }
  }

  cout << r << endl;
  
  
  
  return 0;
}

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

int N,M;
int ans=0;
int maxm=0;

int main(){
  cin>>N>>M;
  for(int i=0;i<M;i++){
    int a,b;
    cin>>a>>b;
    if(a>=N)continue;
    ans+=(N-a);
    maxm=max(maxm,N-a);    
  }
  cout<<ans-maxm<<endl;
  return 0;
}

C++: 
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <cfloat>
#include <map>
#include <utility>
#include <set>
#include <iostream>
#include <memory>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <sstream>
#include <complex>
#include <stack>
#include <queue>
using namespace std;

int a, b, c, d, e;

int main(void)
{
	scanf("%d %d %d %d %d", &a, &b, &c, &d, &e);
	int time = 0;
	bool frozen = (a < 0);
	while (a != b)
	{
		if (frozen)
		{
			if (a != 0)
			{
				time += c;
				++a;
			}
			else
			{
				time += d;
				frozen = false;
			}
		}
		else
		{
			time += e;
			++a;
		}
	}
	printf("%d\n", time);
	return 0;
}

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

using namespace std;

int N, M;
multiset<int> CardsInfo;

int solve(int cnt) {
	int total;
	multiset<int>::iterator curPos;

	if (cnt >= M) {
		return 0;
	}
	cnt = M - cnt;
	total = 0;
	curPos = CardsInfo.begin();
	for (int i = 0; i < cnt; ++i) {
		total += N + *curPos;
		++curPos;
	}
	return total;
}

int main() {
	int cnt, a, b, total;

	cnt = 0;
	cin >> N >> M;
	for (int i = 0; i < M; ++i) {
		cin >> a >> b;
		if (a >= N) {
			++cnt;
			continue;
		}
		CardsInfo.insert(-a);
	}
	--M;
	cout << solve(cnt) << endl;
	
	return 0;
}

C++: #include<iostream>
#include<algorithm>
using namespace std;
int main(){
	int n,m,a,b;
	int sum=0,big=0;
	cin>>n>>m;
	for(int u=0;u<m;u++){
		cin>>a>>b;
		sum+=max(0,n-a);
		big=max(max(0,n-a),big);
	}
	cout<<sum-big<<endl;
	return 0;
}

C++: #include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int inf = 1e9;

int main(){
    int n,m;
    cin >> n >> m;
    int sum=0, cmax=0;;
    for(int i=0; i<m; i++){
        int t, dummy;
        cin >> t >> dummy;
        if(t>n) t=n;
        sum += n-t;
        cmax = max(cmax, n-t);
    }
    cout << sum-cmax << endl;
    return 0;
}