Partition it into as few disjoint contiguous increasing subsequences as possible
Kotlin, 91 bytes

fold(mutableListOf&lt;Int&gt;()){r,i-&gt;r.indexOfFirst{it&lt;i}.let{if(it&lt;0)r+=i else r[it]=i
r}}.size


Beautified

fold(mutableListOf&lt;Int&gt;()) {r,i-&gt;
    r.indexOfFirst { it&lt;i }.let {
        if (it&lt;0) r+=i else r[it]=i
        r
    }
}.size


Test

fun MutableList&lt;Int&gt;.f() =
fold(mutableListOf&lt;Int&gt;()){r,i-&gt;r.indexOfFirst{it&lt;i}.let{if(it&lt;0)r+=i else r[it]=i
r}}.size

fun main(args: Array&lt;String&gt;) {
    val i = mutableListOf(1,2,3,4,3,5)
    println(i.f())
}


TIO

TryItOnline