#include <bits/stdc++.h>
using namespace std;
long long mod = 1000000007;
void err(istream_iterator<string> it) {}
template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
  cerr << *it << " = " << a << "\n";
  err(++it, args...);
}
inline long long add(long long a, long long b) {
  return (a % mod + b % mod + mod) % mod;
}
inline long long mul(long long a, long long b) {
  return (a % mod * b % mod + mod) % mod;
}
inline long long sub(long long a, long long b) {
  return (a % mod - b % mod + mod) % mod;
}
long long modexp(long long x, long long n) {
  if (n == 0) {
    return 1;
  } else if (n & 1) {
    return (modexp((x * x) % mod, n / 2) % mod * x % mod) % mod;
  } else {
    return (modexp((x * x) % mod, n / 2) % mod);
  }
}
void solve() {
  long long n, m;
  cin >> n >> m;
  mod = m;
  long long fac[n + 1];
  fac[0] = 1;
  for (int i = (1); i <= (n); i++) {
    fac[i] = mul(fac[i - 1], i);
  }
  long long ans = 0;
  long long al = n;
  for (int i = 1; i <= n; i++) {
    ans = add(ans, (mul(al, mul(fac[i], fac[n - i + 1]))));
    al--;
  }
  cout << ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long T = 1;
  for (int t = 1; t <= T; t++) {
    solve();
  }
  return 0;
}
