#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const long long INF = 1000000000000000000LL;
const bool DEBUG = false;
void getSeed() {
  ifstream fin("id");
  int a;
  fin >> a;
  srand(a);
  ofstream fout("id");
  fout << a + 1;
}
bool checkPrime(int x) {
  for (int i = 2; i * i <= x; i++)
    if (x % i == 0) return false;
  return true;
}
int getDivisor(int x) {
  int res = 1;
  for (int i = 2; i * i <= x; i++) {
    if (x % i == 0) res = max(res, max(i, x / i));
  }
  return res;
}
int solve(int n, int times) {
  int ans = n;
  if (checkPrime(n))
    return 1;
  else {
    for (int i = 2; i <= min(n, times); i++) {
      if (getDivisor(i) > ans) continue;
      ans = min(ans, getDivisor(i) + getDivisor(n - i));
    }
    for (int i = 2; i <= min(n, 100); i++)
      for (int j = 2; j + i <= min(n, 200); j++) {
        if (getDivisor(i) + getDivisor(j) > ans) continue;
        ans = min(ans, getDivisor(i) + getDivisor(j) + getDivisor(n - i - j));
      }
  }
  return ans;
}
int main() {
  ios_base::sync_with_stdio(0);
  int n;
  cin >> n;
  cout << solve(n, 10000) << endl;
}
