#include <bits/stdc++.h>
using namespace std;
const int MN = 100005, MOD = 1e9 + 7;
int n, m, x, y;
long long st[MN * 10];
pair<int, int> a[MN];
map<int, int> mp;
vector<int> pts;
void pr(int l, int r, int idx) {
  if (l == r) {
    printf("%lld ", st[idx]);
    return;
  }
  int mid = (l + r) / 2;
  pr(l, mid, idx * 2);
  pr(mid + 1, r, idx * 2 + 1);
}
void upd(int l, int r, int x, long long val, int idx) {
  if (l == r) {
    st[idx] += val;
    st[idx] %= MOD;
    return;
  }
  int mid = (l + r) >> 1;
  if (x > mid)
    upd(mid + 1, r, x, val, idx * 2 + 1);
  else
    upd(l, mid, x, val, idx * 2);
  st[idx] = st[idx * 2] + st[idx * 2 + 1];
  st[idx] %= MOD;
}
long long qry(int l, int r, int x, int y, int idx) {
  if (r < x || l > y) return 0;
  if (r <= y && l >= x) return st[idx];
  int mid = (l + r) >> 1;
  return qry(l, mid, x, y, idx * 2) % MOD +
         qry(mid + 1, r, x, y, idx * 2 + 1) % MOD;
}
bool cmp(pair<int, int> x, pair<int, int> y) { return x.second < y.second; }
int main() {
  cin.tie(0);
  cin.sync_with_stdio(0);
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    cin >> x >> y;
    a[i] = {x, y};
    pts.push_back(x);
    pts.push_back(y);
  }
  pts.push_back(0);
  pts.push_back(n);
  sort(pts.begin(), pts.end());
  pts.erase(unique(pts.begin(), pts.end()), pts.end());
  for (int i = 0; i < pts.size(); i++) {
    mp[pts[i]] = i;
  }
  sort(a, a + m, cmp);
  upd(0, pts.size(), 0, 1, 1);
  for (int i = 0; i < m; i++) {
    pair<int, int> p = a[i];
    p.first = mp[p.first];
    p.second = mp[p.second];
    long long ways = qry(0, pts.size(), p.first, p.second - 1, 1) % MOD;
    upd(0, pts.size(), p.second, ways, 1);
  }
  printf("%lld\n", qry(0, pts.size(), pts.size() - 1, pts.size() - 1, 1) % MOD);
  return 0;
}
