#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e6 + 5;
long long n, m, flag, flag1, ma, mi, ans, sum, T, k;
long long a[MAXN], b[MAXN];
char c[MAXN];
int mapp[5001][5001];
string str, str1, str2;
set<char> ss;
vector<char> v;
bool judge(int x) {
  if (x == 2 || x == 3) return false;
  for (int i = 2; i <= sqrt(x); i++) {
    if (x % i == 0) return true;
  }
  return false;
}
struct node {
  int a, b;
} dro[1001];
bool cmp(node x, node y) {
  if (x.a != y.a)
    return x.a < y.a;
  else
    return x.b > y.b;
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    cin >> dro[i].a >> dro[i].b;
  }
  sort(dro, dro + m, cmp);
  for (int i = 0; i < m; i++) {
    if (n <= dro[i].a) {
      cout << "NO" << endl;
      return 0;
    } else
      n += dro[i].b;
  }
  cout << "YES" << endl;
  return 0;
}
