func_code_string: #include <bits/stdc++.h>   using namespace std;   const double PI = acos(-1);   const long long INF = 1LL << 62;   const long long MINF = -(1LL << 62);   template <typename T>   T getint() {     T val = 0;     char c;     bool neg = false;     while ((c = getchar()) && !(c >=  0  && c <=  9 )) {       neg |= c ==  - ;     }     do {       val = (val * 10) + c -  0 ;     } while ((c = getchar()) && (c >=  0  && c <=  9 ));     return val * (neg ? -1 : 1);   }   const long long mod = 1e9 + 7;   const long long MAXN = 300010;   struct fenwick {     long long arr[MAXN];     fenwick() { memset(arr, 0, sizeof arr); }     void incr(int x, int by) {       for (; x < MAXN; x += (x & (-x))) {         arr[x] = (arr[x] + by) % mod;       }     }     int sum(int x) {       long long sum = 0;       for (; x > 0; x -= (x & (-x))) {         sum = (sum + arr[x]) % mod;       }       return sum;     }   };   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     long long n, m;     cin >> n >> m;     vector<long long> c;     vector<pair<long long, long long>> lst(m);     for (int i = 0; i < m; ++i) cin >> lst[i].first >> lst[i].second;     for (int i = 0; i < m; ++i) {       c.push_back(lst[i].first);       c.push_back(lst[i].second);     }     c.push_back(0);     c.push_back(n);     sort((c).begin(), (c).end());     c.resize(distance(c.begin(), unique((c).begin(), (c).end())));     for (int i = 0; i < m; ++i) {       lst[i].first =           lower_bound((c).begin(), (c).end(), lst[i].first) - c.begin();       lst[i].second =           lower_bound((c).begin(), (c).end(), lst[i].second) - c.begin();     }     int st = 0;     st = lower_bound((c).begin(), (c).end(), st) - c.begin();     n = lower_bound((c).begin(), (c).end(), n) - c.begin();     fenwick f;     sort((lst).begin(), (lst).end(),          [&](pair<long long, long long>& egyik, pair<long long, long long>& masik)              -> bool { return egyik.second < masik.second; });     f.incr(st + 1, 1);     for (auto i : lst) {       long long ways = f.sum(i.second) - f.sum(i.first);       f.incr(i.second + 1, ways);     }     cout << (f.sum(n + 1) - f.sum(n) + mod) % mod <<   n ;     return 0;   }   