#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n, a[N], tot;
struct node {
  int l, x, y, r, len;
  node() {}
  node(int l, int x, int y, int r, int len)
      : l(l), x(x), y(y), r(r), len(len) {}
} b[N];
int f(int i, int j) {
  int mx = max(b[i].len, b[j].len) + 1;
  if (b[j].len >= 2 && b[j].x > b[i].r + 1) mx = max(mx, b[i].len + b[j].len);
  if (b[i].len >= 2 && b[i].y < b[j].l - 1) mx = max(mx, b[i].len + b[j].len);
  return mx;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
  for (int i = 1; i <= n; ++i) {
    int j = i + 1;
    while (j <= n && a[j] > a[j - 1]) j++;
    j--;
    if (j - i + 1 >= 2) {
      b[++tot] = node(a[i], a[i + 1], a[j - 1], a[j], j - i + 1);
    } else {
      b[++tot] = node(a[i], 0, n, a[j], j - i + 1);
    }
    i = j;
  }
  if (tot == 1) {
    printf("%d\n", n);
    return 0;
  }
  int ans = 0;
  for (int i = 1; i < tot; ++i) {
    ans = max(ans, f(i, i + 1));
  }
  printf("%d\n", ans);
  return 0;
}
