#include <bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios_base::sync_with_stdio(0);cin.tie(0)
#define infinite 9123456789
#define PRECISION cout.precision(3); cout.setf(ios::fixed);
#define db cout << "Debug" << "\n";
#define ler_entrada freopen("test_input.txt", "r", stdin);

int n, m, a[200010], sum[800010], pref_max[800010], suf_max[800010], suf_min[800010], pref_min[800010], pref[200010], suf[200010];
string s;

void montar(int no, int ini, int fim){
	if(ini==fim){
		suf_min[no]=suf[ini];
		pref_min[no]=pref[ini];
		
		pref_max[no]=pref[ini];
		suf_max[no]=suf[ini];
		
		sum[no]=a[ini];
		return;
	}
	
	int meio=(ini+fim)/2;
	montar(2*no, ini, meio);
	montar(2*no+1, meio+1, fim);
	
	sum[no]=sum[2*no]+ sum[2*no+1];
	pref_max[no]=max(pref_max[2*no], pref_max[2*no+1]);
	suf_max[no]=max(suf_max[2*no+1], suf_max[2*no]);
	
	pref_min[no]=min(pref_min[2*no], pref_min[2*no+1]);
	suf_min[no]=min(suf_min[2*no], suf_min[2*no+1]);
}

int soma(int no, int ini, int fim, int l, int r){
	if(l<=ini and fim<=r) return sum[no];
	if(fim<l or r<ini) return 0;
	
	int meio=(ini+fim)/2;
	int esq=soma(2*no, ini, meio, l, r), dir=soma(2*no+1, meio+1, fim, l, r);
	
	return esq+dir;
}

int pref_maior(int no, int ini, int fim, int l, int r){
	if(l<=ini and fim<=r) return pref_max[no];
	if(fim<l or r<ini) return -infinite;
	
	int meio=(ini+fim)/2;
	int esq=pref_maior(2*no, ini, meio, l, r), dir=pref_maior(2*no+1, meio+1, fim, l, r);
	
	return max(esq, dir);
}

int pref_menor(int no, int ini, int fim, int l, int r){
	if(l<=ini and fim<=r) return pref_min[no];
	if(fim<l or r<ini) return infinite;
	
	int meio=(ini+fim)/2;
	int esq=pref_menor(2*no, ini, meio, l, r), dir=pref_menor(2*no+1, meio+1, fim, l, r);
	
	return min(esq, dir);
}

int suf_maior(int no, int ini, int fim, int l, int r){
	if(l<=ini and fim<=r) return suf_max[no];
	if(fim<l or r<ini) return -infinite;
	
	int meio=(ini+fim)/2;
	int esq=suf_maior(2*no, ini, meio, l, r), dir=suf_maior(2*no+1, meio+1, fim, l, r);
	
	return max(esq, dir);
}

int suf_menor(int no, int ini, int fim, int l, int r){
	if(l<=ini and fim<=r) return suf_min[no];
	if(fim<l or r<ini) return infinite;
	
	int meio=(ini+fim)/2;
	int esq=suf_menor(2*no, ini, meio, l, r), dir=suf_menor(2*no+1, meio+1, fim, l, r);
	
	return min(esq, dir);
}

void solve(){
	cin >> n >> m;
	cin >> s;
	
	for(int i=0; i<=n+2; i++) pref[i]=0, suf[i]=0;
	
	for(int i=0; i<s.size(); i++){
		if(s[i]=='+') a[i+1]=1;
		else a[i+1]=-1;
	}
	for(int i=1; i<=n; i++) pref[i]=pref[i-1]+a[i];
	for(int i=n; i>=1; i--) suf[i]=suf[i+1]+a[i];
	
	montar(1, 1, n);
	
	int tot=sum[1];
	
	for(int i=1; i<=m; i++){
		int l, r; cin >> l >> r;
		//cout << pref_maior(1, 1, n, 1, l-1) << "\n";
		
		int maior=0, menor=0, d0=0, tot_vez=tot-soma(1, 1, n, l, r);
		maior=max(maior, pref_maior(1, 1, n, 1, l-1));
		maior=max(maior, tot_vez-min(d0, suf_menor(1, 1, n, r+1, n)));
		
		menor=min(menor, pref_menor(1, 1, n, 1, l-1));
		menor=min(menor, tot_vez-max(d0, suf_maior(1, 1, n, r+1, n)));
		
		//cout << maior << " " << menor << "\n";
		cout << maior-menor+1 << "\n";
	}
}

signed main(){
	IOS; int t; cin >> t;
	for(int i=1; i<=t; i++) solve();
}