#include <bits/stdc++.h>
using namespace std;
int n, m;
string t, s;
bool check(const vector<int>& freqs, const vector<int>& freqt, int stars) {
int extneeded = 0;
for (int i = 0; i < 26; ++i) {
if (freqs[i] < freqt[i]) {
extneeded += freqt[i] - freqs[i];
}
}
return extneeded <= stars;
}
void input() {
cin >> n >> m >> t >> s;
}
void solve() {
vector<int> freqt(26, 0);
for (char c : t) {
freqt[c - 'a']++;
}
vector<int> freqs(26, 0);
int stars = 0;
for (int i = 0; i < n; ++i) {
if (s[i] == '*')
stars++;
else
freqs[s[i] - 'a']++;
}
int cnt = 0;
if (check(freqs, freqt, stars))
cnt++;
for (int i = n; i < m; ++i) {
if (s[i - n] == '*')
stars--;
else
freqs[s[i - n] - 'a']--;
if (s[i] == '*')
stars++;
else
freqs[s[i] - 'a']++;
if (check(freqs, freqt, stars))
cnt++;
}
cout << cnt << endl;
}
int main() {
ios_base ::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
if (fopen("CAU3.inp", "r")) {
freopen("CAU3.inp", "r", stdin);
freopen("CAU3.out", "w", stdout);
}
input();
solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCBuLCBtOwpzdHJpbmcgdCwgczsKCmJvb2wgY2hlY2soY29uc3QgdmVjdG9yPGludD4mIGZyZXFzLCBjb25zdCB2ZWN0b3I8aW50PiYgZnJlcXQsIGludCBzdGFycykgewogICAgaW50IGV4dG5lZWRlZCA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDI2OyArK2kpIHsKICAgICAgICBpZiAoZnJlcXNbaV0gPCBmcmVxdFtpXSkgewogICAgICAgICAgICBleHRuZWVkZWQgKz0gZnJlcXRbaV0gLSBmcmVxc1tpXTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gZXh0bmVlZGVkIDw9IHN0YXJzOwp9Cgp2b2lkIGlucHV0KCkgewogICAgY2luID4+IG4gPj4gbSA+PiB0ID4+IHM7Cn0KCnZvaWQgc29sdmUoKSB7CiAgICB2ZWN0b3I8aW50PiBmcmVxdCgyNiwgMCk7CiAgICBmb3IgKGNoYXIgYyA6IHQpIHsKICAgICAgICBmcmVxdFtjIC0gJ2EnXSsrOwogICAgfQoKICAgIHZlY3RvcjxpbnQ+IGZyZXFzKDI2LCAwKTsKICAgIGludCBzdGFycyA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgIGlmIChzW2ldID09ICcqJykKICAgICAgICAgICAgc3RhcnMrKzsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGZyZXFzW3NbaV0gLSAnYSddKys7CiAgICB9CgogICAgaW50IGNudCA9IDA7CiAgICBpZiAoY2hlY2soZnJlcXMsIGZyZXF0LCBzdGFycykpCiAgICAgICAgY250Kys7CgogICAgZm9yIChpbnQgaSA9IG47IGkgPCBtOyArK2kpIHsKICAgICAgICBpZiAoc1tpIC0gbl0gPT0gJyonKQogICAgICAgICAgICBzdGFycy0tOwogICAgICAgIGVsc2UKICAgICAgICAgICAgZnJlcXNbc1tpIC0gbl0gLSAnYSddLS07CgogICAgICAgIGlmIChzW2ldID09ICcqJykKICAgICAgICAgICAgc3RhcnMrKzsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGZyZXFzW3NbaV0gLSAnYSddKys7CgogICAgICAgIGlmIChjaGVjayhmcmVxcywgZnJlcXQsIHN0YXJzKSkKICAgICAgICAgICAgY250Kys7CiAgICB9CgogICAgY291dCA8PCBjbnQgPDwgZW5kbDsKfQoKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZSA6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKDApOwogICAgY291dC50aWUoMCk7CgogICAgaWYgKGZvcGVuKCJDQVUzLmlucCIsICJyIikpIHsKICAgICAgICBmcmVvcGVuKCJDQVUzLmlucCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oIkNBVTMub3V0IiwgInciLCBzdGRvdXQpOwogICAgfQoKICAgIGlucHV0KCk7CiAgICBzb2x2ZSgpOwogICAgCiAgICByZXR1cm4gMDsKfQ==