func_code_string: #include <bits/stdc++.h>   using namespace std;   typedef long long ll;         pair<int, int> intersect(pair<int, int> a, pair<int, int> b)   {       vector<pair<int, int>> v;       v.push_back(a);       v.push_back(b);       sort(v.begin(), v.end());       a = v[0];       b = v[1];          if(a.first >= b.first && a.second <= b.second) return a;       if(b.first >= a.first && b.second <= a.second) return b;          if(a.second >= b.first)       {           return {b.first, a.second};       }          return {1, 0};   }      int main() {       cin.tie(0);       cin.sync_with_stdio(0);             int t; cin>>t;       while(t--)       {           int n, m; cin>>n>>m;           string s; cin>>s;              pair<int, int> L[n], R[n];           int X[n];           int mn = 0, mx = 0;           int x = 0;           for(int i = 0; i < n; i++)           {               if(s[i] ==  + )               {                   x++;                   mx = max(mx, x);               }               else               {                   x--;                   mn = min(mn, x);               }                  L[i] = {mn, mx};               X[i] = x;           }              mn = 0, mx = 0;           for(int i = n - 1; i >= 0; i--)           {               if(s[i] ==  + )               {                   mx++;                   mn++;               }               else               {                   mx--;                   mn--;               }                  mx = max(mx, 0);               mn = min(0, mn);               R[i] = {mn, mx};           }              while(m--)           {               int l, r;               cin>>l>>r;                  --l;               --r;                     if(!l && r == n - 1)               {                   cout<<1<<  n ;                   continue;               }               if(!l)               {                   cout<<R[r + 1].second - R[r + 1].first + 1<<  n ;               }               else if(r == n - 1)               {                   cout<<L[l - 1].second - L[l - 1].first + 1<<  n ;               }               else               {                   int x = X[l - 1];                   pair<int, int> before = L[l - 1];                   pair<int, int> after  = R[r + 1];                      after.first  += x;                   after.second += x;                      int out = before.second - before.first + 1 + after.second - after.first + 1;                   pair<int, int> sec = intersect(before, after);                   out -= sec.second - sec.first + 1;                      cout<<out<<  n ;               }           }       }   }   