import java.util.Arrays;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int K = s.nextInt();
        int N = s.nextInt();
        int A[] = new int[N];
        int A_min[] = new int[N];
        for (int i = 0; i < N; i++) {
            A[i] = s.nextInt();
        }

        culRoot(A, A_min, K, N);
        Arrays.sort(A_min);

        System.out.println(A_min[0]);

        s.close();
    }

    public static void culRoot(int A[], int A_min[], int K, int N) {
        for (int i = 0; i < N; i++) {
            if (i == 0) {
                A_min[i] = min(A[N - 1] - A[0], A[0] + K - A[1]);
            } else if (i == N - 1) {
                A_min[i] = min(A[N - 1] - A[0], A[N - 2] + K - A[N - 1]);
            } else {
                A_min[i] = min(K - (A[i] - A[i - 1]), K - (A[i + 1] - A[i]));
            }
        }
    }

    public static int min(int X, int Y) {
        if (X >= Y) {
            return Y;
        } else {
            return X;
        }
    }
} import java.util.Arrays; Arrays java.util import java.util.Scanner; Scanner java.util public class Main {

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int K = s.nextInt();
        int N = s.nextInt();
        int A[] = new int[N];
        int A_min[] = new int[N];
        for (int i = 0; i < N; i++) {
            A[i] = s.nextInt();
        }

        culRoot(A, A_min, K, N);
        Arrays.sort(A_min);

        System.out.println(A_min[0]);

        s.close();
    }

    public static void culRoot(int A[], int A_min[], int K, int N) {
        for (int i = 0; i < N; i++) {
            if (i == 0) {
                A_min[i] = min(A[N - 1] - A[0], A[0] + K - A[1]);
            } else if (i == N - 1) {
                A_min[i] = min(A[N - 1] - A[0], A[N - 2] + K - A[N - 1]);
            } else {
                A_min[i] = min(K - (A[i] - A[i - 1]), K - (A[i + 1] - A[i]));
            }
        }
    }

    public static int min(int X, int Y) {
        if (X >= Y) {
            return Y;
        } else {
            return X;
        }
    }
} Main public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int K = s.nextInt();
        int N = s.nextInt();
        int A[] = new int[N];
        int A_min[] = new int[N];
        for (int i = 0; i < N; i++) {
            A[i] = s.nextInt();
        }

        culRoot(A, A_min, K, N);
        Arrays.sort(A_min);

        System.out.println(A_min[0]);

        s.close();
    } main {
        Scanner s = new Scanner(System.in);
        int K = s.nextInt();
        int N = s.nextInt();
        int A[] = new int[N];
        int A_min[] = new int[N];
        for (int i = 0; i < N; i++) {
            A[i] = s.nextInt();
        }

        culRoot(A, A_min, K, N);
        Arrays.sort(A_min);

        System.out.println(A_min[0]);

        s.close();
    } Scanner s = new Scanner(System.in); s new Scanner(System.in) int K = s.nextInt(); K s.nextInt() s.nextInt s int N = s.nextInt(); N s.nextInt() s.nextInt s int A[] = new int[N]; A new int[N] N int A_min[] = new int[N]; A_min new int[N] N for (int i = 0; i < N; i++) {
            A[i] = s.nextInt();
        } int i = 0; int i = 0; i 0 i < N i N i++ i++ i {
            A[i] = s.nextInt();
        } {
            A[i] = s.nextInt();
        } A[i] = s.nextInt() A[i] A i s.nextInt() s.nextInt s culRoot(A, A_min, K, N) culRoot A A_min K N Arrays.sort(A_min) Arrays.sort Arrays A_min System.out.println(A_min[0]) System.out.println System.out System System.out A_min[0] A_min 0 s.close() s.close s String[] args args public static void culRoot(int A[], int A_min[], int K, int N) {
        for (int i = 0; i < N; i++) {
            if (i == 0) {
                A_min[i] = min(A[N - 1] - A[0], A[0] + K - A[1]);
            } else if (i == N - 1) {
                A_min[i] = min(A[N - 1] - A[0], A[N - 2] + K - A[N - 1]);
            } else {
                A_min[i] = min(K - (A[i] - A[i - 1]), K - (A[i + 1] - A[i]));
            }
        }
    } culRoot {
        for (int i = 0; i < N; i++) {
            if (i == 0) {
                A_min[i] = min(A[N - 1] - A[0], A[0] + K - A[1]);
            } else if (i == N - 1) {
                A_min[i] = min(A[N - 1] - A[0], A[N - 2] + K - A[N - 1]);
            } else {
                A_min[i] = min(K - (A[i] - A[i - 1]), K - (A[i + 1] - A[i]));
            }
        }
    } for (int i = 0; i < N; i++) {
            if (i == 0) {
                A_min[i] = min(A[N - 1] - A[0], A[0] + K - A[1]);
            } else if (i == N - 1) {
                A_min[i] = min(A[N - 1] - A[0], A[N - 2] + K - A[N - 1]);
            } else {
                A_min[i] = min(K - (A[i] - A[i - 1]), K - (A[i + 1] - A[i]));
            }
        } int i = 0; int i = 0; i 0 i < N i N i++ i++ i {
            if (i == 0) {
                A_min[i] = min(A[N - 1] - A[0], A[0] + K - A[1]);
            } else if (i == N - 1) {
                A_min[i] = min(A[N - 1] - A[0], A[N - 2] + K - A[N - 1]);
            } else {
                A_min[i] = min(K - (A[i] - A[i - 1]), K - (A[i + 1] - A[i]));
            }
        } {
            if (i == 0) {
                A_min[i] = min(A[N - 1] - A[0], A[0] + K - A[1]);
            } else if (i == N - 1) {
                A_min[i] = min(A[N - 1] - A[0], A[N - 2] + K - A[N - 1]);
            } else {
                A_min[i] = min(K - (A[i] - A[i - 1]), K - (A[i + 1] - A[i]));
            }
        } if (i == 0) {
                A_min[i] = min(A[N - 1] - A[0], A[0] + K - A[1]);
            } else if (i == N - 1) {
                A_min[i] = min(A[N - 1] - A[0], A[N - 2] + K - A[N - 1]);
            } else {
                A_min[i] = min(K - (A[i] - A[i - 1]), K - (A[i + 1] - A[i]));
            } i == 0 i 0 {
                A_min[i] = min(A[N - 1] - A[0], A[0] + K - A[1]);
            } A_min[i] = min(A[N - 1] - A[0], A[0] + K - A[1]) A_min[i] A_min i min(A[N - 1] - A[0], A[0] + K - A[1]) min A[N - 1] - A[0] A[N - 1] A N - 1 N 1 A[0] A 0 A[0] + K - A[1] A[0] + K A[0] A 0 K A[1] A 1 if (i == N - 1) {
                A_min[i] = min(A[N - 1] - A[0], A[N - 2] + K - A[N - 1]);
            } else {
                A_min[i] = min(K - (A[i] - A[i - 1]), K - (A[i + 1] - A[i]));
            } i == N - 1 i N - 1 N 1 {
                A_min[i] = min(A[N - 1] - A[0], A[N - 2] + K - A[N - 1]);
            } A_min[i] = min(A[N - 1] - A[0], A[N - 2] + K - A[N - 1]) A_min[i] A_min i min(A[N - 1] - A[0], A[N - 2] + K - A[N - 1]) min A[N - 1] - A[0] A[N - 1] A N - 1 N 1 A[0] A 0 A[N - 2] + K - A[N - 1] A[N - 2] + K A[N - 2] A N - 2 N 2 K A[N - 1] A N - 1 N 1 {
                A_min[i] = min(K - (A[i] - A[i - 1]), K - (A[i + 1] - A[i]));
            } A_min[i] = min(K - (A[i] - A[i - 1]), K - (A[i + 1] - A[i])) A_min[i] A_min i min(K - (A[i] - A[i - 1]), K - (A[i + 1] - A[i])) min K - (A[i] - A[i - 1]) K (A[i] - A[i - 1]) A[i] A i A[i - 1] A i - 1 i 1 K - (A[i + 1] - A[i]) K (A[i + 1] - A[i]) A[i + 1] A i + 1 i 1 A[i] A i int A[] A int A_min[] A_min int K K int N N public static int min(int X, int Y) {
        if (X >= Y) {
            return Y;
        } else {
            return X;
        }
    } min {
        if (X >= Y) {
            return Y;
        } else {
            return X;
        }
    } if (X >= Y) {
            return Y;
        } else {
            return X;
        } X >= Y X Y {
            return Y;
        } return Y; Y {
            return X;
        } return X; X int X X int Y Y public class Main {

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int K = s.nextInt();
        int N = s.nextInt();
        int A[] = new int[N];
        int A_min[] = new int[N];
        for (int i = 0; i < N; i++) {
            A[i] = s.nextInt();
        }

        culRoot(A, A_min, K, N);
        Arrays.sort(A_min);

        System.out.println(A_min[0]);

        s.close();
    }

    public static void culRoot(int A[], int A_min[], int K, int N) {
        for (int i = 0; i < N; i++) {
            if (i == 0) {
                A_min[i] = min(A[N - 1] - A[0], A[0] + K - A[1]);
            } else if (i == N - 1) {
                A_min[i] = min(A[N - 1] - A[0], A[N - 2] + K - A[N - 1]);
            } else {
                A_min[i] = min(K - (A[i] - A[i - 1]), K - (A[i + 1] - A[i]));
            }
        }
    }

    public static int min(int X, int Y) {
        if (X >= Y) {
            return Y;
        } else {
            return X;
        }
    }
} public class Main {

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int K = s.nextInt();
        int N = s.nextInt();
        int A[] = new int[N];
        int A_min[] = new int[N];
        for (int i = 0; i < N; i++) {
            A[i] = s.nextInt();
        }

        culRoot(A, A_min, K, N);
        Arrays.sort(A_min);

        System.out.println(A_min[0]);

        s.close();
    }

    public static void culRoot(int A[], int A_min[], int K, int N) {
        for (int i = 0; i < N; i++) {
            if (i == 0) {
                A_min[i] = min(A[N - 1] - A[0], A[0] + K - A[1]);
            } else if (i == N - 1) {
                A_min[i] = min(A[N - 1] - A[0], A[N - 2] + K - A[N - 1]);
            } else {
                A_min[i] = min(K - (A[i] - A[i - 1]), K - (A[i + 1] - A[i]));
            }
        }
    }

    public static int min(int X, int Y) {
        if (X >= Y) {
            return Y;
        } else {
            return X;
        }
    }
} Main
import java.util.Arrays;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int K = s.nextInt();
        int N = s.nextInt();
        int A[] = new int[N];
        int A_min[] = new int[N];
        for (int i = 0; i < N; i++) {
            A[i] = s.nextInt();
        }

        culRoot(A, A_min, K, N);
        Arrays.sort(A_min);

        System.out.println(A_min[0]);

        s.close();
    }

    public static void culRoot(int A[], int A_min[], int K, int N) {
        for (int i = 0; i < N; i++) {
            if (i == 0) {
                A_min[i] = min(A[N - 1] - A[0], A[0] + K - A[1]);
            } else if (i == N - 1) {
                A_min[i] = min(A[N - 1] - A[0], A[N - 2] + K - A[N - 1]);
            } else {
                A_min[i] = min(K - (A[i] - A[i - 1]), K - (A[i + 1] - A[i]));
            }
        }
    }

    public static int min(int X, int Y) {
        if (X >= Y) {
            return Y;
        } else {
            return X;
        }
    }
}