func_code_string: #include <bits/stdc++.h>   using namespace std;   vector<int> sieve(int n) {     vector<bool> prime(n + 1, true);     prime[0] = false;     prime[1] = false;     int m = sqrt(n);     vector<int> ans;     for (int p = 2; p <= m; p++) {       if (prime[p]) {         for (int i = p * 2; i <= n; i += p) prime[i] = false;       }     }     for (int i = 0; i < n; i++)       if (prime[i]) ans.push_back(i);     return ans;   }   int gcd(int a, int b) {     if (b == 0) return a;     return gcd(b, a % b);   }   int mod = 1e9 + 7;   int power(int a, long long b) {     int res = 1;     while (b) {       if (b & 1) res = 1LL * res * a % mod;       a = 1LL * a * a % mod;       b >>= 1;     }     return res;   }   long long min(int a, long long b) {     if (a > b) return b;     return a;   }   long long max(int a, long long b) {     if (a > b) return a;     return b;   }   void solve() {     long long n, m;     cin >> n >> m;     vector<pair<int, int>> p;     for (int i = 0; i < m; i++) {       int x, y;       cin >> x >> y;       p.push_back({x, y});     }     long long ans =         max(p[0].first + p[0].second - 1, p[m - 1].second + (n - p[m - 1].first));     for (int i = 1; i < m; i++) {       if (abs(p[i].second - p[i - 1].second) > p[i].first - p[i - 1].first) {         cout <<  IMPOSSIBLE ;         return;       }       ans = max(ans, max(p[i].second, p[i - 1].second) +                          (p[i].first - p[i - 1].first -                           abs(p[i].second - p[i - 1].second)) /                              2);     }     cout << ans;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     cout.tie(NULL);     int mul = 0;     if (mul == 1) {       int t;       cin >> t;       while (t--) {         solve();         cout <<   n ;       }     } else {       solve();     }   }   