#include <bits/stdc++.h>
using namespace std;
long long int cnt[200005 * 4], add[200005 * 4];
long long int poww[200005];
long long int bas = 206299;
long long int mod = 1190496521;
void update(int root, int l, int r, int first, int second) {
  if (l == r) {
    cnt[root] += (second > 0 ? 1 : -1);
    add[root] += second;
    return;
  }
  int m = (l + r) / 2;
  if (first <= m)
    update(root * 2, l, m, first, second);
  else
    update(root * 2 + 1, m + 1, r, first, second);
  cnt[root] = (cnt[root * 2] + cnt[root * 2 + 1]) % mod;
  add[root] = add[root * 2] + add[root * 2 + 1] * poww[cnt[root * 2]] % mod;
  add[root] %= mod;
}
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  long long int tar = 0;
  long long int sum = 0;
  poww[0] = 1;
  for (int i = 1; i <= m; i++) poww[i] = poww[i - 1] * bas % mod;
  for (int i = 0; i < n; i++) {
    int first;
    scanf("%d", &first);
    tar += first * poww[i] % mod;
    tar %= mod;
    sum += poww[i];
    sum %= mod;
  }
  int ans = 0;
  vector<pair<int, int> > arr;
  for (int i = 1; i <= m; i++) {
    int first;
    scanf("%d", &first);
    arr.push_back({first, i});
  }
  sort(arr.begin(), arr.end());
  for (int i = 0; i < m; i++) {
    update(1, 1, m, arr[i].second, arr[i].first);
    if (i >= n - 1) {
      long long int tmp = tar + sum * (i - n + 1) % mod;
      tmp %= mod;
      if (add[1] == tmp) ans++;
      update(1, 1, m, arr[i - n + 1].second, -arr[i - n + 1].first);
    }
  }
  printf("%d\n", ans);
}
