#include <bits/stdc++.h>
using namespace std;
#pragma warning(disable : 4996)
#pragma comment(linker, "/STACK:20000007")
#pragma GCC optimize("unroll-loops")
const int N = (int)1e6 + 100;
const int maxn = (int)1e3 + 100;
const int base = (int)1e9;
const int mod = (int)1e9 + 7;
const int inf = INT_MAX;
const long long ll_inf = LLONG_MAX;
const long double PI = acos((long double)-1.0);
const long double eps = 1e-8;
void solve() {
  int n, s;
  scanf("%d%d", &n, &s);
  vector<int> P(n);
  for (int i = 0; i < n; ++i) {
    scanf("%d", &P[i]);
  }
  multiset<int> S;
  for (int i = 0; i < n; ++i) {
    S.insert(P[i]);
  }
  map<int, int> C;
  for (int i = 0; i < n; ++i) {
    C[P[i]]++;
  }
  int ans = 0;
  --s;
  if (P[s]) {
    C[P[s]]--;
    S.erase(S.find(P[s]));
    C[0]++;
    ++ans;
    P[s] = 0;
  }
  ans += C[0] - 1;
  int have = C[0] - 1;
  S.erase(0);
  int now = 1;
  while (!S.empty() && now <= *(--S.end())) {
    if (S.find(now) != S.end())
      ;
    else if (have)
      --have;
    else {
      ++ans;
      S.erase(--S.end());
    }
    ++now;
  }
  printf("%d\n", ans);
}
int main() {
  int T = 1;
  for (; T; --T) solve();
  return 0;
}
