#include <bits/stdc++.h>
using namespace std;
mt19937 rnd(time(0));
const long long inf = 0x3f3f3f3fLL;
const long long N = 2e5 + 5;
const long long MOD = 1e9 + 7;
struct BIT {
  long long n;
  vector<long long> ft;
  BIT(long long n) : n(n), ft(n) {}
  long long add(long long x, long long y) {
    x += y;
    if (x >= MOD) return x - MOD;
    return x;
  }
  long long sub(long long x, long long y) {
    x -= y;
    if (x < 0) return x + MOD;
    return x;
  }
  void upd(long long i, long long x) {
    for (; i < n; i |= i + 1) ft[i] = add(ft[i], x);
  }
  long long get(long long i) {
    long long ans = 0;
    for (; i >= 0; i = (i & (i + 1)) - 1) ans = add(ans, ft[i]);
    return ans;
  }
  long long get_range(long long l, long long r) {
    return sub(get(r), get(l - 1));
  }
  void upd_range(long long l, long long r, long long x) {
    upd(l, x);
    upd(r + 1, -x);
  }
};
long long s[N], t[N];
int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  long long n, m;
  cin >> n >> m;
  BIT obj(N);
  vector<long long> a;
  for (long long i = 0; i < m; i++) {
    cin >> s[i] >> t[i];
    a.push_back(s[i]);
    a.push_back(t[i]);
  }
  a.push_back(0);
  a.push_back(n);
  sort(a.begin(), a.end());
  a.erase(unique(a.begin(), a.end()), a.end());
  vector<pair<long long, long long>> seg;
  for (long long i = 0; i < m; i++) {
    s[i] = lower_bound(a.begin(), a.end(), s[i]) - a.begin();
    t[i] = lower_bound(a.begin(), a.end(), t[i]) - a.begin();
    seg.emplace_back(t[i], s[i]);
  }
  sort(seg.begin(), seg.end());
  obj.upd(0, 1);
  for (long long i = 0; i < m; i++) {
    obj.upd(seg[i].first, obj.get_range(seg[i].second, seg[i].first - 1));
  }
  cout << obj.get_range(a.size() - 1, a.size() - 1);
  return 0;
}
