
#include <bits/stdc++.h>

using namespace std;

/* g++ -g -fsanitize=address -lasan -std=c++11 -Dfoo_ */

/* freopen("input.txt", "rt", stdin); */
/* freopen("output.txt", "wt", stdout); */

#define ALL(c)          (c).begin(), (c).end()
#define ALLR(c)         (c).rbegin(), (c).rend()
#define FOR(i,a,b)      for (int i=(a); i < (b); ++i)
#define FORR(i,a,b)     for (int i=(a); i > (b); --i)
#define FOR_ALL(i,c)    for (__typeof((c).begin()) i=(c).begin();   \
                             i != (c).end(); ++i)
#define FOR_ALLR(i,c)   for (__typeof((c).rbegin()) i=(c).rbegin(); \
                             i != (c).rend(); ++i)
#define SZ(array)       (sizeof(array)/sizeof(array[0]))
#define lc(x)           (x<<1)     /* 2*x */
#define rc(x)           (x<<1 | 1) /* 2*x+1 */
#define lowbit(x)       (x & (-x)) /* 0b10100 -> 0b100 */

typedef long long       LL;
typedef map<int,int>    MII;
typedef pair<int,int>   PII;
typedef set<int>        SI;
typedef vector<bool>    VB;
typedef vector<double>  VD;
typedef vector<int>     VI;
typedef vector<string>  VS;

/* check if a key is in container C */
template <class C>
inline bool in_(const typename C::key_type& k, const C& A)
{ return A.find(k) != A.end(); }
inline bool in_(const string& s, const string& S)
{ return S.find(s) != string::npos; }

const int maxn = 2e5+5;
int A[maxn], mii[2][maxn], mxx[2][maxn];

int main()
{
#ifdef foo_
    freopen("foo", "rt", stdin);
#endif
    ios::sync_with_stdio(false);
    int t; cin >> t;
    while (t--) {
        int n,m; cin >> n >> m; string s; cin >> s; s = string(" ") + s;
        FOR(i,1,n+1)
            A[i] = A[i-1] + (s[i] == '+' ? 1 : -1);
        FOR(i,0,n+1) FOR(j,0,2) 
            mii[j][i] = mxx[j][i] = A[i];
        FOR(i,1,n+1) {
            mii[0][i] = min(mii[0][i],mii[0][i-1]);
            mxx[0][i] = max(mxx[0][i],mxx[0][i-1]);
        }
        FORR(i,n-1,0) {
            mii[1][i] = min(mii[1][i],mii[1][i+1]);
            mxx[1][i] = max(mxx[1][i],mxx[1][i+1]);
        }
        FOR(_,0,m) {
            int a,b; cin >> a >> b;
            int mi = mii[0][a-1];
            int mx = mxx[0][a-1];
            if (b < n) {
                const int diff = A[b]-A[a-1];
                mi = min(mi, mii[1][b+1]-diff);
                mx = max(mx, mxx[1][b+1]-diff);
            }
            cout << mx-mi+1 << endl;
        }
    }
    return 0;
}
