#include <iostream>
#include <vector>
#include <cmath>
#include <limits>
#define REP(i,n) for (int i = 0; (i) < (n); ++(i))
using namespace std;
template <class T> struct StarrySkyTreeMax {
int N;
vector<T> node_acc, node_max;
const T INF = numeric_limits<T>::min() / 2;
StarrySkyTreeMax (int n) {
N = 2 << (int)log2(n);
node_acc.resize(N*2,0);
node_max.resize(N*2,0);
}
void add(int l, int r, T val) {
_add(l,r,val,0,0,N);
}
T get_max(int l, int r) {
return _get_max(l,r,0,0,N);
}
void _add(int a, int b, T x, int k, int l, int r) {
if (r <= a || b <= l) return;
if (a <= l && r <= b) {
node_acc[k] += x;
} else {
_add(a,b,x,k*2+1,l,(l+r)/2);
_add(a,b,x,k*2+2,(l+r)/2,r);
T l_val = node_max[k*2+1] + node_acc[k*2+1];
T r_val = node_max[k*2+2] + node_acc[k*2+2];
node_max[k] = max(l_val,r_val);
}
}
T _get_max(int a, int b, int k, int l, int r) {
if (r <= a || b <= l) return INF;
if (a <= l && r <= b) return node_max[k] + node_acc[k];
T l_val = _get_max(a,b,k*2+1,l,(l+r)/2);
T r_val = _get_max(a,b,k*2+2,(l+r)/2,r);
return max(l_val,r_val) + node_acc[k];
}
};
int main() {
StarrySkyTreeMax<int> inst(100010);
int N; cin >> N;
vector<int> S(N),T(N);
REP(i,N) cin >> S[i] >> T[i];
REP(i,N) inst.add(S[i],T[i],1);
int ans = 1e9;
REP(i,N) {
inst.add(S[i],T[i],-1);
ans = min(ans,inst.get_max(0,N+1));
inst.add(S[i],T[i],1);
}
cout << ans << endl;
return 0;
}