func_code_string: #include <bits/stdc++.h>   using namespace std;   int read() {     char c = getchar();     while (c <  0  || c >  9 ) c = getchar();     int x = 0;     while (c >=  0  && c <=  9 ) {       x = x * 10 + c -  0 ;       c = getchar();     }     return x;   }   const int maxn = (1 << 21) + 3;   const int INF = 0x3f3f3f3f;   struct segtree {     int n;     int tag[maxn], mmin[maxn];     int ul, ur, uv;     void update(int o, int l, int r) {       if (ul <= l && ur >= r) {         tag[o] = max(tag[o], uv);         mmin[o] = max(mmin[o], uv);         return;       }       int mid = (l + r) / 2;       if (ul <= mid) update(o * 2, l, mid);       if (ur > mid) update(o * 2 + 1, mid + 1, r);       mmin[o] = max(min(mmin[o * 2], mmin[o * 2 + 1]), tag[o]);     }     void modify(int l, int r, int v) {       if (l > r) return;       ul = l, ur = r, uv = v;       update(1, 1, n);     }     int p, x;     int query2(int o, int l, int r) {       if (max(tag[o], mmin[o]) >= x) return n + 1;       if (l == r) return l;       int mid = (l + r) / 2;       if (mmin[o * 2] < x)         return query2(o * 2, l, mid);       else         return query2(o * 2 + 1, mid + 1, r);     }     int query(int o, int l, int r) {       if (max(tag[o], mmin[o]) >= x) return n + 1;       if (l == r) return l;       int mid = (l + r) / 2;       if (p > mid)         return query(o * 2 + 1, mid + 1, r);       else {         int ans = query(o * 2, l, mid);         if (ans != n + 1)           return ans;         else           return query2(o * 2 + 1, mid + 1, r);       }     }     int query(int p, int x) {       if (p > n) return n + 1;       this->p = p, this->x = x;       return query(1, 1, n);     }   } t;   struct edge {     int l, r;     bool operator<(const edge& rhs) const { return r < rhs.r; }   } e[maxn];   struct query {     int id, x, y;     bool operator<(const query& rhs) const { return y < rhs.y; }   } q[maxn];   int ans[maxn];   void write(int x) {     if (x >= 10) write(x / 10);     putchar(x % 10 +  0 );   }   void writeln(int x) {     write(x);     putchar(  n );   }   int main() {     int n = t.n = read(), k = read();     for (int i = 1; i <= k; i++) e[i].l = read(), e[i].r = read();     sort(e + 1, e + k + 1);     int m = read();     for (int i = 1; i <= m; i++) q[i].id = i, q[i].x = read(), q[i].y = read();     sort(q + 1, q + m + 1);     int now = 1;     for (int i = 1; i <= m; i++) {       while (now <= k && e[now].r <= q[i].y) {         t.modify(e[now].l + 1, e[now].r, e[now].l);         now++;       }       ans[q[i].id] = t.query(q[i].x + 1, q[i].x) - 1;     }     for (int i = 1; i <= m; i++) writeln(ans[i]);   }   