#include <iostream>
#include <string>

using namespace std;

int n, m;
string e[15];
string text;
bool dp[5005][1<<12];

int main(void)
{
	while(1){
		cin >> n >> m;
		if(n == 0 && m == 0) break;
		
		string s;
		for(int i = 0; i < n; i++) cin >> e[i];
		
		text = "";
		for(int i = 0; i < m; i++){
			cin >> s;
			//s.erase(s.end()-1);
			text += s;
		}
		
		for(int i = 0; i <= text.size(); i++){
			for(int j = 0; j < (1<<n); j++){
				dp[i][j] = false;
			}
			dp[i][0] = true;
		}
		for(int i = 0; i <= text.size(); i++){
			for(int j = 0; j < n; j++){
				if(text.size() - i < e[j].size()) continue;
				if(text.substr(i, e[j].size()) != e[j]) continue;
				
				for(int k = 0; k < (1<<n); k++){
					if(k & (1<<j)) continue;
					if(!dp[i][k]) continue;
					dp[i+e[j].size()][k | (1<<j)] = true;
				}
			}
		}
		
		int ans = 0;
		for(int i = 0; i <= text.size(); i++){
			if(dp[i][(1<<n)-1]) ans++;
		}
		cout << ans << endl;
	}
	
	return 0;
}