#include <bits/stdc++.h>
using namespace std;
const long long int inf = 1e9 + 7;
void solve();
void sieve();
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout << fixed;
  cout << setprecision(10);
  long long int t = 1;
  while (t--) solve();
  return 0;
}
long long int pr[1001];
vector<long long int> prime;
void sieve() {
  pr[0] = -1;
  pr[1] = -1;
  long long int i, j;
  for (i = 2; i < 1001; i++) {
    if (pr[i] != -1) {
      pr[i] = 1;
      for (j = 2; j < 1001 / i + 1; j++) {
        if (i * j < 1001) pr[i * j] = -1;
      }
    }
  }
  for (i = 2; i < 1001; i++) {
    if (pr[i] == 1) prime.push_back(i);
  }
}
bool pal(string s) {
  string t = s;
  reverse(s.begin(), s.end());
  return (t == s);
}
long long int countdig(long long int x) {
  long long int c = 0;
  if (x == 0) return 1;
  while (x != 0) {
    c++;
    x /= 10;
  }
  return c;
}
bool isprime(long long int x) {
  bool flag = true;
  for (long long int i = 2; i <= sqrt(x) + 1; i++) {
    if (x % i == 0) {
      flag = false;
      break;
    }
  }
  if (x == 1) flag = false;
  return flag;
}
void swap(long long int& a, long long int& b) {
  long long int t = a;
  a = b;
  b = t;
}
class matrix {
 public:
  vector<vector<long long int>> v;
  long long int row;
  long long int col;
  matrix(vector<vector<long long int>> mat) {
    v.assign(mat.begin(), mat.end());
    row = mat.size();
    col = mat[0].size();
  }
  vector<vector<long long int>> I(long long int n) {
    vector<vector<long long int>> mat(n, vector<long long int>(n, 0));
    for (long long int i = 0; i < n; i++) mat[i][i] = 1;
    return mat;
  }
  matrix operator*(matrix& u) {
    long long int r = this->row;
    long long int c = u.col;
    assert(this->col == u.row);
    vector<vector<long long int>> res(r, vector<long long int>(c, 0));
    for (long long int i = 0; i < r; i++) {
      for (long long int j = 0; j < c; j++) {
        for (long long int k = 0; k < this->col; k++)
          res[i][j] += v[i][k] * u.v[k][j];
      }
    }
    return matrix(res);
  }
  matrix fastexpo(matrix m, long long int p) {
    assert(m.row == m.col);
    matrix res(I(m.row));
    while (p) {
      if (p & 1) res = res * m;
      m = m * m;
      p = p >> 1;
    }
    return res;
  }
};
bool comp(long long int a, long long int b) { return a > b; }
void solve() {
  long long int n, k;
  cin >> n >> k;
  long long int l = ceil(k / 2.0) - 1;
  long long int low = max(1LL, k - n);
  long long int high = min(n, l);
  cout << max(high - low + 1, 0LL);
}
