import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.BufferedWriter;
import java.io.Writer;
import java.io.OutputStreamWriter;
import java.util.InputMismatchException;
import java.io.IOException;
import java.io.InputStream;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 *
 * @author AyushKM
 */
public class Main {
   public static void main(String[] args) {
      InputStream inputStream = System.in;
      OutputStream outputStream = System.out;
      InputReader in = new InputReader(inputStream);
      OutputWriter out = new OutputWriter(outputStream);
      CWalkOnMultiplicationTable solver = new CWalkOnMultiplicationTable();
      solver.solve(1, in, out);
      out.close();
   }

   static class CWalkOnMultiplicationTable {
      public void solve(int testNumber, InputReader in, OutputWriter out) {
         long n = in.nextLong();
         long check = isPrime(n);
         if (check != -1) {
            long a = n / check;
            out.println(a + check - 2);
         } else
            out.println(n - 1);
      }

      private long isPrime(long n) {
         for (int x = (int) (Math.sqrt(n)); x >= 2; x--) {
            if (n % x == 0)
               return x;
         }
         return -1;
      }

   }

   static class InputReader {
      private InputStream stream;
      private byte[] buf = new byte[1024];
      private int curChar;
      private int numChars;
      private InputReader.SpaceCharFilter filter;

      public InputReader(InputStream stream) {
         this.stream = stream;
      }

      public int read() {
         if (numChars == -1) {
            throw new InputMismatchException();
         }
         if (curChar >= numChars) {
            curChar = 0;
            try {
               numChars = stream.read(buf);
            } catch (IOException e) {
               throw new InputMismatchException();
            }
            if (numChars <= 0) {
               return -1;
            }
         }
         return buf[curChar++];
      }

      public long nextLong() {
         int c = read();
         while (isSpaceChar(c)) {
            c = read();
         }
         int sgn = 1;
         if (c == '-') {
            sgn = -1;
            c = read();
         }
         long res = 0;
         do {
            if (c < '0' || c > '9') {
               throw new InputMismatchException();
            }
            res *= 10;
            res += c - '0';
            c = read();
         } while (!isSpaceChar(c));
         return res * sgn;
      }

      public boolean isSpaceChar(int c) {
         if (filter != null) {
            return filter.isSpaceChar(c);
         }
         return isWhitespace(c);
      }

      public static boolean isWhitespace(int c) {
         return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
      }

      public interface SpaceCharFilter {
         public boolean isSpaceChar(int ch);

      }

   }

   static class OutputWriter {
      private final PrintWriter writer;

      public OutputWriter(OutputStream outputStream) {
         writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream)));
      }

      public OutputWriter(Writer writer) {
         this.writer = new PrintWriter(writer);
      }

      public void close() {
         writer.close();
      }

      public void println(long i) {
         writer.println(i);
      }

   }
}



Measured memory_bytes: 23380