#include <bits/stdc++.h>
using namespace std;
const int MOD = int(1e9) + 7;
const int MAXN = 2 * int(1e5) + 10;
int add(int a, int b) {
  if ((a += b) >= MOD) a -= MOD;
  return a;
}
int dp[MAXN];
int sum[MAXN];
int n, m;
int s[MAXN];
int t[MAXN];
vector<int> who_end[MAXN];
vector<int> coord;
int main() {
  scanf("%d%d", &n, &m);
  if (m == 0) {
    puts("0");
    return 0;
  }
  for (int i = 0; i < m; i++) {
    scanf("%d%d", &s[i], &t[i]);
    coord.push_back(s[i]);
    coord.push_back(t[i]);
  }
  sort(coord.begin(), coord.end());
  coord.resize(unique(coord.begin(), coord.end()) - coord.begin());
  for (int i = 0; i < m; i++) {
    s[i] = lower_bound(coord.begin(), coord.end(), s[i]) - coord.begin();
    t[i] = lower_bound(coord.begin(), coord.end(), t[i]) - coord.begin();
    who_end[t[i]].push_back(i);
  }
  sum[0] = 0;
  sum[1] = 1;
  dp[0] = 1;
  for (int i = 1; i < ((int)(coord).size()); i++) {
    dp[i] = 0;
    for (int j = 0; j < ((int)(who_end[i]).size()); j++) {
      int id = who_end[i][j];
      int l = s[id];
      dp[i] = add(dp[i], add(sum[i], -sum[l] + MOD));
    }
    sum[i + 1] = add(sum[i], dp[i]);
  }
  if (*coord.rbegin() != n || coord[0] != 0) dp[((int)(coord).size()) - 1] = 0;
  printf("%d\n", dp[((int)(coord).size()) - 1]);
  return 0;
}
