#include <bits/stdc++.h>
using namespace std;
void ga(int N, int *A) {
  for (int i(0); i < N; i++) scanf("%d", A + i);
}
struct FW {
  long long t[333333], S;
  void clr(int s) {
    (memset(t, 0, sizeof(t)));
    S = s;
  }
  void inc(int i, int d) {
    for (; i < S; i |= i + 1) t[i] += d, t[i] %= 1000000007;
  }
  long long sum(int i) {
    int s(0);
    while (~i) s += t[i], i &= i + 1, --i, s %= 1000000007;
    return s;
  }
  long long gt(int l, int r) {
    return (sum(r) - sum(l - 1) + 1000000007) % 1000000007;
  }
} F;
void rnm(int *A, int N) {
  static int B[333333], L;
  memcpy(B, A, N << 2);
  sort(B, B + N), L = unique(B, B + N) - B;
  unordered_map<int, int> T;
  for (int i(0); i < L; i++) T[B[i]] = i;
  for (int i(0); i < N; i++) A[i] = T[A[i]];
}
int N, B[333333], E[333333], X, C[333333], H[333333], I, a;
bool cp(int a, int b) { return E[a] < E[b]; }
int main(void) {
  scanf("%d%d", &X, &N), C[2 * N] = X, iota(H, H + N, 0), F.clr(333333 - 5);
  for (int i(0); i < N; i++)
    scanf("%d%d", B + i, E + i), C[i] = B[i], C[i + N] = E[i];
  rnm(C, N + N + 2), sort(H, H + N, cp), F.inc(0, 1);
  for (int i(0); i < N; i++) B[i] = C[i], E[i] = C[i + N];
  for (int i(0); i < N; i++) I = H[i], a = F.gt(B[I], E[I] - 1), F.inc(E[I], a);
  printf("%lld\n", F.gt(C[N * 2], C[2 * N]));
  return 0;
}
