#include "bits/stdc++.h"
#define fst \
std::ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0);
#define ll long long
#define f(x, y, z) for (register ll x = (y); x <= (z); x++)
using namespace std;
const ll INF = 0x3f3f3f3f3f3f3f3f, M = 12, N = 1e6 + 10;
ll m, q;
string s;
string w[M];
ll br[M], qj[M][N];
void jqj(long long y)
{
string k = w[y] + "#" + s;
memset(br, 0, sizeof(br));
f(i, 2, k.size() - 1)
{
long long p = br[i - 1];
while (p && k[i] != k[p+1])
p = br[p];
if (k[i] == k[p+1])
br[i] = p + 1;
if (i - w[y].size() > 0)
{
if (br[i] == w[y].size() - 1)
qj[y][i - w[y].size()] = qj[y][i - w[y].size() - 1] + 1;
else
qj[y][i - w[y].size()] = qj[y][i - w[y].size() - 1];
}
}
return;
}
signed main()
{
fst;
cin >> m >> q;
cin >> s;
f(i, 1, m)
{
cin >> w[i];
w[i] = " " + w[i];
jqj(i);
}
f(i, 1, q)
{
ll x, y;
cin >> x >> y;
ll ans = 0;
f(j, 1, m)
{
if(y-x+1>=w[j].size()-1)
ans += qj[j][y] - qj[j][x+w[j].size()-3];
}
cout << ans << endl;
}
return 0;
}