import java.util.* ;
public class Main {
public static void main(String...args) {
Scanner scan = new Scanner(System.in) ;
int n = Integer.parseInt(scan.nextLine().trim()) ;
String arr[] = null ;
while (scan.hasNextLine()) {
arr = scan.nextLine().split(" ") ;
}
int num[] = new int[n] ;
for(int i = 0 ; i < n ; i ++) {
num[i] = Integer.parseInt(arr[i]) ;
}
System.out.println(maxLen(num)) ;
}
public static int maxLen(int[] num) {
int len = num.length ;
//dp1[i]表示以num[i]结尾的最长上升子序列的长度
int[] dp1 = new int[len] ;
//dp2[i]表示以num[i]开头的最长上升子序列的长度
int[] dp2 = new int[len] ;
//计算dp1
dp1[0] = 1 ;
for(int i = 1 ; i < len ; i ++) {
dp1[i] = 1 ;
if(num[i] > num[i - 1]) {
dp1[i] = dp1[i - 1] + 1 ;
}
}
//计算dp2
dp2[len - 1] = 1 ;
for(int i = len - 2 ; i >= 0 ; i --) {
dp2[i] = 1 ;
if(num[i] < num[i + 1]) {
dp2[i] = dp2[i + 1] + 1 ;
}
}
//对于num[i],如果num[i+1] - num[i-1] >= 2 则
//可以选择改变num[i]得值使得:以num[i]结尾和开头的子序列连接起来
//形成一个连续的子序列
//最终的结果是 max(dp1[i],dp2[i],dp1[i]+dp2[i]-1|num[i+1] - num[i-1] >= 2 , dp1[i] + 1 , dp2[i] + 1)
int maxLen = 1 ;
for(int i = 0 ; i < len ; i ++) {
int tmpLen = Math.max(dp1[i] , dp2[i]) ;
if(i > 0 && i < len - 1 && num[i + 1] - num[i - 1] >= 2) {
tmpLen = Math.max(tmpLen , dp1[i - 1] + dp2[i + 1] + 1) ;
}
if(i > 0) {
tmpLen = Math.max(tmpLen , dp1[i - 1] + 1) ;
}
if(i < len -1) {
tmpLen = Math.max(tmpLen , dp1[i + 1] + 1) ;
}
if(tmpLen > maxLen) {
maxLen = tmpLen ;
}
}
return maxLen ;
}
}