You are given an array a consisting of n integers.

You can remove at most one element from this array. Thus, the final length of the array is n-1 or n.

Your task is to calculate the maximum possible length of the strictly increasing contiguous subarray of the remaining array.

Recall that the contiguous subarray a with indices from l to r is a[l ... r] = a_l, a_{l + 1}, ..., a_r. The subarray a[l ... r] is called strictly increasing if a_l < a_{l+1} < ... < a_r.

Input

The first line of the input contains one integer n (2 ≤ n ≤ 2 ⋅ 10^5) — the number of elements in a.

The second line of the input contains n integers a_1, a_2, ..., a_n (1 ≤ a_i ≤ 10^9), where a_i is the i-th element of a.

Output

Print one integer — the maximum possible length of the strictly increasing contiguous subarray of the array a after removing at most one element.

Examples

Input


5
1 2 5 3 4


Output


4


Input


2
1 2


Output


2


Input


7
6 5 4 3 2 4 3


Output


2

Note

In the first example, you can delete a_3=5. Then the resulting array will be equal to [1, 2, 3, 4] and the length of its largest increasing subarray will be equal to 4.
import java.io.*;
import java.util.*;

public class Main {

    static int n;
    static int[] arr;
    static int[][] dp;
    public static int dp(int idx, int f){
        if(idx >= n) return 0;

        if(dp[idx][f] != -1) return dp[idx][f];

        int ans = 1;
        if(idx + 1 < n && arr[idx+1] > arr[idx])
            ans = Math.max(ans, dp(idx+1,f) + 1);
        if(idx + 2 < n && arr[idx+2] > arr[idx] && f == 0)
            ans = Math.max(ans, dp(idx+2,1) + 1);

        return dp[idx][f] = ans;
    }

    public static void main(String[] args) throws IOException, InterruptedException {
        n = sc.nextInt(); arr = sc.nextIntArr(n);
        dp = new int[n+2][2];
        for(int[] arr : dp) Arrays.fill(arr,-1);
        int ans = 1;
        for (int i = 0; i < n; i++) {
            ans = Math.max(dp(i,0),ans);
        }
        pw.println(ans);

        pw.close();
    }

    public static void pairSort(Pair[] arr) {
        ArrayList<Pair> l = new ArrayList<>();
        Collections.addAll(l, arr);
        Collections.sort(l);
        for (int i = 0; i < arr.length; i++) {
            arr[i] = l.get(i);
        }
    }
    public static void longSort(long[] arr) {
        ArrayList<Long> l = new ArrayList<>();
        for (long i : arr) l.add(i);
        Collections.sort(l);
        for (int i = 0; i < arr.length; i++) {
            arr[i] = l.get(i);
        }
    }
    public static void intSort(int[] arr) {
        ArrayList<Integer> l = new ArrayList<>();
        for (int i : arr) l.add(i);
        Collections.sort(l);
        for (int i = 0; i < arr.length; i++) {
            arr[i] = l.get(i);
        }
    }

    static class Pair implements Comparable<Pair> {
        int len; String s;
        public Pair(int first, String second){ len = first; s = second; }
        @Override
        public int compareTo(Pair o) {
            return 0;
        }
    }
    static class Edge implements Comparable<Edge> {
        int node, w;

        Edge(int node, int w) {	this.node = node; this.w = w; }

        public int compareTo(Edge e) { return w - e.w; }

        @Override
        public String toString() {
            return "("+ node +","+w+")";
        }
    }
    static class Triple {
        int x, y, z;

        Triple(int a, int b, int c) { x = a; y = b; z = c;}


        //        public int compareTo(Triple t)
//        {
//            if(Math.abs(sum - t.sum) < 1e-9) return x > t.x ? 1 : -1;
//            return sum > t.sum ? 1 : -1;
//        }
        public String toString()
        {
            return "(" + x + ", " + y  + ", " + z + ")";
        }
    }

    static class Scanner {
        StringTokenizer st;
        BufferedReader br;

        public Scanner(InputStream s) {
            br = new BufferedReader(new InputStreamReader(s));
        }

        public String next() throws IOException {
            while (st == null || !st.hasMoreTokens())
                st = new StringTokenizer(br.readLine());
            return st.nextToken();
        }

        public int nextInt() throws IOException {
            return Integer.parseInt(next());
        }

        public long nextLong() throws IOException {
            return Long.parseLong(next());
        }

        public String nextLine() throws IOException {
            return br.readLine();
        }

        public double nextDouble() throws IOException {
            String x = next();
            StringBuilder sb = new StringBuilder("0");
            double res = 0, f = 1;
            boolean dec = false, neg = false;
            int start = 0;
            if (x.charAt(0) == '-') {
                neg = true;
                start++;
            }
            for (int i = start; i < x.length(); i++)
                if (x.charAt(i) == '.') {
                    res = Long.parseLong(sb.toString());
                    sb = new StringBuilder("0");
                    dec = true;
                } else {
                    sb.append(x.charAt(i));
                    if (dec)
                        f *= 10;
                }
            res += Long.parseLong(sb.toString()) / f;
            return res * (neg ? -1 : 1);
        }

        public boolean ready() throws IOException {
            return br.ready();
        }

        public int[] nextIntArr(int n) throws IOException {
            int[] arr = new int[n];
            for (int i = 0; i < n; i++) {
                arr[i] = Integer.parseInt(next());
            }
            return arr;
        }

        public long[] nextLongArr(int n) throws IOException {
            long[] arr = new long[n];
            for (int i = 0; i < n; i++) {
                arr[i] = Long.parseLong(next());
            }
            return arr;
        }

    }
    static PrintWriter pw = new PrintWriter(System.out);
    static Scanner sc = new Scanner(System.in);
    static Random random = new Random();
    static final long MOD = 1_000_000_000 + 7;
    static final int INF = (int) 1e9;
}