func_code_string: #include <bits/stdc++.h>   using namespace std;   const double PI = acos(-1.0);   double fixAngle(double A) { return A > 1 ? 1 : (A < -1 ? -1 : A); }   double dcmp(double a, double b) {     return fabs(a - b) < 1e-6 ? 0 : a > b ? 1 : -1;   }   const int MAX_SIZE = 3e5 + 5;   const int MOD = 1e9 + 7;   int r = 0;   long long segtree[MAX_SIZE * 4];   void update(long long L, long long R, long long t, long long val,               long long idx) {     if (L == R && R == t) {       segtree[idx] += val;       segtree[idx] %= MOD;       return;     }     if (L > t || R < t) return;     update(L, (L + R) / 2, t, val, idx * 2);     update((L + R) / 2 + 1, R, t, val, idx * 2 + 1);     segtree[idx] = (segtree[idx * 2] + segtree[idx * 2 + 1]) % MOD;   }   long long query(long long L, long long R, long long tl, long long tr,                   long long idx) {     if (L >= tl && R <= tr) {       return segtree[idx] % MOD;     }     if (L > tr || R < tl) return 0;     return (query(L, (L + R) / 2, tl, tr, idx * 2) +             query((L + R) / 2 + 1, R, tl, tr, idx * 2 + 1)) %            MOD;   }   map<long long, long long> rnk;   int main() {     set<long long> tmp;     long long n, m, a, b;     vector<pair<long long, long long> > data;     cin >> n >> m;     tmp.insert(0);     tmp.insert(n);     for (long long i = 0; i < m; i++) {       cin >> a >> b;       data.push_back({b, a});       tmp.insert(a);       tmp.insert(b);       tmp.insert(b - 1);     }     for (long long x : tmp) {       rnk[x] = ++r;     }     sort(data.begin(), data.end());     update(0, MAX_SIZE - 1, 1, 1, 1);     for (int i = 0; i < m; i++) {       swap(data[i].second, data[i].first);       int x =           query(0, MAX_SIZE - 1, rnk[data[i].first], rnk[data[i].second - 1], 1);       update(0, MAX_SIZE - 1, rnk[data[i].second], x, 1);     }     cout << query(0, MAX_SIZE - 1, rnk[n], rnk[n], 1) % MOD;   }   