#include<bits/stdc++.h>
using namespace std;
#define ll long long int
const int maxn=1e6+10,size=2000;
int a[maxn],now[maxn],ans=1,out[maxn];
struct node{
int l,r;
int index;
}query[maxn];
int cmp(node x,node y)
{
if((int)x.l/size == (int)y.l/size) return x.r<y.r;
return x.l<y.l;
}
void upd(int x){if(++now[a[x]]==1) ans++;}
void del(int x){if(--now[a[x]]==0) ans--;}
int main()
{
int n,m;scanf("%d%d",&n,&m);
string s;cin>>s;
for(int i=0;i<n;i++)
{
if(s[i]=='+')a[i+1]=a[i]+1;
if(s[i]=='-')a[i+1]=a[i]-1;
}
for(int i=1;i<=m;i++) scanf("%d%d",&query[i].l,&query[i].r),query[i].index=i;
sort(query+1,query+1+m,cmp);
int nowl=1,nowr=1;now[a[1]]++;
for(int i=1;i<=m;i++)
{
while(query[i].r>nowr) nowr++,upd(nowr);
while(query[i].r<nowr) del(nowr),nowr--;
while(query[i].l<nowl) nowl--,upd(nowl);
while(query[i].l>nowl) del(nowl),nowl++;
out[query[i].index]=ans;
}
for(int i=1;i<=m;i++) printf("%d\n",out[i]);
return 0;
}